1. #include <stdio.h>
  2. #include <string.h>
  3. #include <math.h>
  4. #include <stdbool.h>
  5.  
  6. #define MAX_LENGTH 128
  7. #define ASSIST_LENGTH 19
  8.  
  9. int main(int argc, char **argv)
  10. {
  11. unsigned long long data[MAX_LENGTH] = {}, tmp = ;
  12. int i = , j = , o_len = MAX_LENGTH - ASSIST_LENGTH;
  13. bool c_flag = true;
  14.  
  15. if (argc < )
  16. {
  17. printf("argument error\n");
  18. return -;
  19. }
  20.  
  21. if (strlen(argv[]) > o_len)
  22. {
  23. printf("out of range\n");
  24. return -;
  25. }
  26.  
  27. if (strlen(argv[]) > )
  28. {
  29. printf("out of range\n");
  30. return -;
  31. }
  32.  
  33. tmp = atoll(argv[]);
  34.  
  35. if (9223372036854775807ULL == tmp && ('' == argv[][] || '' == argv[][]))
  36. {
  37. printf("out of range\n");
  38. return -;
  39. }
  40.  
  41. for (i = strlen(argv[])-; i >= ; i--)
  42. {
  43. data[j] = argv[][i] - ;
  44. j++;
  45. }
  46.  
  47. for (i = o_len - ; i >= ; i--)
  48. {
  49. if (c_flag && == data[i])
  50. {
  51. continue;
  52. }
  53.  
  54. c_flag = false;
  55. printf("%llu", data[i]);
  56. }
  57. printf(" * %llu\n", tmp);
  58.  
  59. for (i = ; i < o_len; i++)
  60. {
  61. if ( == data[i])
  62. {
  63. continue;
  64. }
  65.  
  66. data[i] *= tmp;
  67. }
  68.  
  69. for (i = ; i < o_len; i++)
  70. {
  71. if ( == data[i])
  72. {
  73. continue;
  74. }
  75.  
  76. tmp = data[i];
  77.  
  78. for (j = ASSIST_LENGTH-; j >= ; j--)
  79. {
  80. data[i+j] += (tmp / (unsigned long long)pow(,j));
  81. tmp %= (unsigned long long)pow(,j);
  82. }
  83.  
  84. data[i] %= ;
  85. }
  86.  
  87. c_flag = true;
  88. for (i = MAX_LENGTH - ; i >= ; i--)
  89. {
  90. if (c_flag && == data[i])
  91. {
  92. continue;
  93. }
  94.  
  95. c_flag = false;
  96. printf("%llu", data[i]);
  97. }
  98. printf("\n");
  99.  
  100. return ;
  101. }

实现了任意大数与 2^64-1以下的数相乘,

两个任意大数可以将其中一个拆分成多个因子,

两个大数质数暂未考虑

linux c 实现大数相乘的更多相关文章

  1. Linux C/C++ 编程练手 --- 大数相加和大数相乘

    最近写了一个大数相乘和相加的程序,结果看起来是对的.不过期间的效率可能不是最好的,有些地方也是临时为了解决问题而直接写出来的. 可以大概说一下相乘和相加的解决思路(当然,大数操作基本就是两个字符串的操 ...

  2. POJ 2389 Bull Math(水~Java -大数相乘)

    题目链接:http://poj.org/problem?id=2389 题目大意: 大数相乘. 解题思路: java BigInteger类解决 o.0 AC Code: import java.ma ...

  3. 大数相乘算法C++版

    #include <iostream> #include <cstring> using namespace std; #define null 0 #define MAXN ...

  4. java版大数相乘

    在搞ACM的时候遇到大数相乘的问题,在网上找了一下,看到了一个c++版本的 http://blog.csdn.net/jianzhibeihang/article/details/4948267 用j ...

  5. Karatsuba乘法--实现大数相乘

    Karatsuba乘法 Karatsuba乘法是一种快速乘法.此算法在1960年由Anatolii Alexeevitch Karatsuba 提出,并于1962年得以发表.此算法主要用于两个大数相乘 ...

  6. leetcode 43 Multiply Strings 大数相乘

    感觉是大数相乘算法里面最能够描述.模拟演算过程的思路 class Solution { public String multiply(String num1, String num2) { if(nu ...

  7. Java 大数相乘、大数相加、大数相减

    思路来源:: https://blog.csdn.net/lichong_87/article/details/6860329 /** * @date 2018/6/22 * @description ...

  8. 华为上机测试题(大数相乘-java)

    PS:这个不是自己写的,测试OK,供参考. /** * 大数相乘 */ public class BigData { public static void main(String[] args) { ...

  9. 求解Catalan数,(大数相乘,大数相除,大数相加)

    Catalan数 卡塔兰数是组合数学中一个常在各种计数问题中出现的数列.以比利时的数学家欧仁·查理·卡塔兰(1814–1894)命名.历史上,清代数学家明安图(1692年-1763年)在其<割圜 ...

随机推荐

  1. [转]poll技术

    poll()函数:这个函数是某些Unix系统提供的用于执行与select()函数同等功能的函数,下面是这个函数的声明: #include <poll.h> int poll(struct ...

  2. Lnmp下安装memcached

            Lnmp下安装memcached 1.先安装 libevent,再安装 Memcached主程序 # tar xf libevent-2.0.21-stable.tar.gz # cd ...

  3. jQuery formValidator表单验证插件

    什么是jQuery formValidator? jQuery formValidator表单验证插件是客户端表单验证插件. 在做B/S开发的时候,我们经常涉及到很多表单验证,例如新用户注册,填写个人 ...

  4. 实现 kindle 原生系统、多看系弹出注释的通用写法

    入手 Kindle 后开始自己做 ePub,之前一直用原生系统,使用的弹出注释代码如下: <p class="P_Footnote" id="ref_footnot ...

  5. ASP.NET验证控件应用实例与详解。

    ASP.NET公有六种验证控件,分别如下:  控件名      功能描叙 1RequiredFieldValidator(必须字段验证)  用于检查是否有输入值 2CompareValidator(比 ...

  6. poj3211

    Washing Clothes Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 9654   Accepted: 3095 ...

  7. freeCodeCamp:Convert HTML Entities

    将字符串中的字符 &.<.>." (双引号), 以及 '(单引号)转换为它们对应的 HTML 实体. 现在这个表里找出要转化的符号https://dev.w3.org/h ...

  8. NodeJS学习之异步编程

    NodeJS -- 异步编程 NodeJS最大的卖点--事件机制和异步IO,对开发者并不透明 代码设计模式 异步编程有很多特有的代码设计模式,为了实现同样的功能,使用同步方式和异步方式编写代码会有很大 ...

  9. 纯JS画点、画线、画圆的方法

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. Android使用JNI(从java调用本地函数)

    当编写一个混合有本地C代码和Java的应用程序时,需要使用Java本地接口(JNI)作为连接桥梁.JNI作为一个软件层和API,允许使用本地代码调用Java对象的方法,同时也允许在Java方法中调用本 ...