linux c 实现大数相乘
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdbool.h> #define MAX_LENGTH 128
#define ASSIST_LENGTH 19 int main(int argc, char **argv)
{
unsigned long long data[MAX_LENGTH] = {}, tmp = ;
int i = , j = , o_len = MAX_LENGTH - ASSIST_LENGTH;
bool c_flag = true; if (argc < )
{
printf("argument error\n");
return -;
} if (strlen(argv[]) > o_len)
{
printf("out of range\n");
return -;
} if (strlen(argv[]) > )
{
printf("out of range\n");
return -;
} tmp = atoll(argv[]); if (9223372036854775807ULL == tmp && ('' == argv[][] || '' == argv[][]))
{
printf("out of range\n");
return -;
} for (i = strlen(argv[])-; i >= ; i--)
{
data[j] = argv[][i] - ;
j++;
} for (i = o_len - ; i >= ; i--)
{
if (c_flag && == data[i])
{
continue;
} c_flag = false;
printf("%llu", data[i]);
}
printf(" * %llu\n", tmp); for (i = ; i < o_len; i++)
{
if ( == data[i])
{
continue;
} data[i] *= tmp;
} for (i = ; i < o_len; i++)
{
if ( == data[i])
{
continue;
} tmp = data[i]; for (j = ASSIST_LENGTH-; j >= ; j--)
{
data[i+j] += (tmp / (unsigned long long)pow(,j));
tmp %= (unsigned long long)pow(,j);
} data[i] %= ;
} c_flag = true;
for (i = MAX_LENGTH - ; i >= ; i--)
{
if (c_flag && == data[i])
{
continue;
} c_flag = false;
printf("%llu", data[i]);
}
printf("\n"); return ;
}
实现了任意大数与 2^64-1以下的数相乘,
两个任意大数可以将其中一个拆分成多个因子,
两个大数质数暂未考虑
linux c 实现大数相乘的更多相关文章
- Linux C/C++ 编程练手 --- 大数相加和大数相乘
最近写了一个大数相乘和相加的程序,结果看起来是对的.不过期间的效率可能不是最好的,有些地方也是临时为了解决问题而直接写出来的. 可以大概说一下相乘和相加的解决思路(当然,大数操作基本就是两个字符串的操 ...
- POJ 2389 Bull Math(水~Java -大数相乘)
题目链接:http://poj.org/problem?id=2389 题目大意: 大数相乘. 解题思路: java BigInteger类解决 o.0 AC Code: import java.ma ...
- 大数相乘算法C++版
#include <iostream> #include <cstring> using namespace std; #define null 0 #define MAXN ...
- java版大数相乘
在搞ACM的时候遇到大数相乘的问题,在网上找了一下,看到了一个c++版本的 http://blog.csdn.net/jianzhibeihang/article/details/4948267 用j ...
- Karatsuba乘法--实现大数相乘
Karatsuba乘法 Karatsuba乘法是一种快速乘法.此算法在1960年由Anatolii Alexeevitch Karatsuba 提出,并于1962年得以发表.此算法主要用于两个大数相乘 ...
- leetcode 43 Multiply Strings 大数相乘
感觉是大数相乘算法里面最能够描述.模拟演算过程的思路 class Solution { public String multiply(String num1, String num2) { if(nu ...
- Java 大数相乘、大数相加、大数相减
思路来源:: https://blog.csdn.net/lichong_87/article/details/6860329 /** * @date 2018/6/22 * @description ...
- 华为上机测试题(大数相乘-java)
PS:这个不是自己写的,测试OK,供参考. /** * 大数相乘 */ public class BigData { public static void main(String[] args) { ...
- 求解Catalan数,(大数相乘,大数相除,大数相加)
Catalan数 卡塔兰数是组合数学中一个常在各种计数问题中出现的数列.以比利时的数学家欧仁·查理·卡塔兰(1814–1894)命名.历史上,清代数学家明安图(1692年-1763年)在其<割圜 ...
随机推荐
- 使用app loader上传iOS应用
正如上篇文章中提到的,因为一些原因我尝试通过app loader打包上传应用到appStore 其实这个使用还是挺简单 的 首先要知道怎么打开loader 打开方式有两种 一种是直接打开loade ...
- 使用Nginx SSI功能辅助HTML页面设计
SSI,Server Side Include,支持html静态文件内以 <!--#include file="/layout/header.html"--> 的方式 ...
- POI导出EXCEL经典实现
1.Apache POI简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程式对Microsoft Office格式档案读和写的功能. .NET的开发人员则 ...
- Java计算机网络
计算机网络: 分布在不同的地域的计算机通过外接设备(路由器),实现共享和数据传输网络编程:网络编程主要是用来解决计算机和计算机之间的数据传输网络编程:不需要基于HTML就可以达到数据之间的传输,比如Q ...
- 宽度的100%和auto的区别
前段时间做项目,发现分不清width设为100%和auto的区别,实在是太水了,就查了点资料,做个总结,有不对的地方欢迎大家指出. width:auto 块级元素默认的宽度值.看一下MDN上的解释:T ...
- Echarts 使用遇到的问题
1.在使用ECharts的数据视图时,单击打开数据视图如下,当单击close按钮时,如果当前图像区域包含在一个<from></from>标签中,则会刷整个新页面, 去掉< ...
- C语言中关于float和double的输入输出格式
1.对于double类型,输入格式为scanf("%lf %lf", &foo, &bar); 对于float类型,输入格式为scanf("%f %f, ...
- Android高手进阶:Adapter深入理解与优化
一般是针对包含多个元素的View,如ListView,GridView,ExpandableListview,的时候我们是给其设置一个Adapter.Adapter是与View之间提供数据的桥梁,也是 ...
- DWZ (JUI) 教程 国际化问题(多语言/语言切换)
DWZ 国际化也是比较简单的,网站的内容国际化和常规的项目国际化是一样的,不要做出特殊的调整. DWZ 自身框架的国际化,比如 翻页的上一页下一页等信息.这些信息都是在dwz.frag.xml 文件当 ...
- [老老实实学WCF] 第二篇 配置WCF
老老实实学WCF 第二篇 配置WCF 在上一篇中,我们在一个控制台应用程序中编写了一个简单的WCF服务并承载了它.先回顾一下服务端的代码: using System; using System.Col ...