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年)在其<割圜 ...
随机推荐
- [转]poll技术
poll()函数:这个函数是某些Unix系统提供的用于执行与select()函数同等功能的函数,下面是这个函数的声明: #include <poll.h> int poll(struct ...
- Lnmp下安装memcached
Lnmp下安装memcached 1.先安装 libevent,再安装 Memcached主程序 # tar xf libevent-2.0.21-stable.tar.gz # cd ...
- jQuery formValidator表单验证插件
什么是jQuery formValidator? jQuery formValidator表单验证插件是客户端表单验证插件. 在做B/S开发的时候,我们经常涉及到很多表单验证,例如新用户注册,填写个人 ...
- 实现 kindle 原生系统、多看系弹出注释的通用写法
入手 Kindle 后开始自己做 ePub,之前一直用原生系统,使用的弹出注释代码如下: <p class="P_Footnote" id="ref_footnot ...
- ASP.NET验证控件应用实例与详解。
ASP.NET公有六种验证控件,分别如下: 控件名 功能描叙 1RequiredFieldValidator(必须字段验证) 用于检查是否有输入值 2CompareValidator(比 ...
- poj3211
Washing Clothes Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 9654 Accepted: 3095 ...
- freeCodeCamp:Convert HTML Entities
将字符串中的字符 &.<.>." (双引号), 以及 '(单引号)转换为它们对应的 HTML 实体. 现在这个表里找出要转化的符号https://dev.w3.org/h ...
- NodeJS学习之异步编程
NodeJS -- 异步编程 NodeJS最大的卖点--事件机制和异步IO,对开发者并不透明 代码设计模式 异步编程有很多特有的代码设计模式,为了实现同样的功能,使用同步方式和异步方式编写代码会有很大 ...
- 纯JS画点、画线、画圆的方法
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Android使用JNI(从java调用本地函数)
当编写一个混合有本地C代码和Java的应用程序时,需要使用Java本地接口(JNI)作为连接桥梁.JNI作为一个软件层和API,允许使用本地代码调用Java对象的方法,同时也允许在Java方法中调用本 ...