《C语言中超大整数乘法运算》由会员分享,可在线阅读,更多相关《C语言中超大整数乘法运算(9页珍藏版)》请在人人文库网上搜索。

1、C 语言中超大整数乘法运算在计算机中,长整型 (long int) 变量的范围是 -2147483648 至 2147483647 ,因此若用长整型变量做乘法运算,乘积最多不能超过 10 位数。即便用双精度型 (double) 变量,也仅能保证 16 位有效数字的精度。在某些需要更高精度的乘法运算的场合,需要用别的办法来实现乘法运算。比较容易想到的是做多位数乘法时列竖式进行计算的方法,只要写出模拟这一过程的程序,就能实现任意大整数的乘法运算。经过查阅资料,找到一种更易于编程的方法,即“列表法”。下面先介绍“列表法”:例如当计算 8765 x 234时,把乘数与被乘数照如下列出,见表1 :把表 。

2、1 中的数按图示斜线分组(横纵坐标和相等的数分为一组),把每组数的累加起来所得的和记在表格下方,见表 2 :从最低位的 20 开始,保留个位数字“0 ”,把个位以外的数“2 ”进到前一位;把39次低位的加上低位进上来的2 得 41 ,保留个位数字“1 ”,把“4 ”进到前一位;以此类推,直至最高位的 16 ,16 加上低位进上来的4 得 20 ,保留“0 ”,把2 进到最高位,得乘积答数2051010 。根据以上思路就可以编写C 程序了,再经分析可得:.1、一个 m 位的整数与一个n 位的整数相乘,乘积为m+n-1位或 m+n 位。2、程序中,用三个字符数组分别存储乘数、被乘数与乘积。由第1 。

3、点分析知,存放乘积的字符数组的长度应不小于存放乘数与被乘数的两个数组的长度之和。3、可以把第二步“计算填表”与第三四步“累加进位”放在一起完成,可以节省存储表格2 所需的空间。4、程序关键部分是两层循环,内层循环累计一组数的和,外层循环处理保留的数字与进位。编写的程序如下:#define MAXLENGTH 1000#include #include void compute(char *a, char *b, char *c);void main(void)char aMAXLENGTH, bMAXLENGTH, cMAXLENGTH * 2;puts(Input multiplier :)。

4、;gets(a);puts(Input multiplicand :);gets(b);compute(a, b, c);puts(Answer :);puts(c);getchar();.void compute(char *a, char *b, char *c)int i, j, m, n;long sum, carry;m = strlen(a) - 1;n = strlen(b) - 1;for (i = m; i = 0; i-)ai -= 0;for (i = n; i = 0; i-)bi -= 0;cm + n + 2 = 0;carry = 0;for (i = m + n。

5、; i = 0; i-) /* i为坐标和 */sum = carry;if (j = i - m) #include#include#include#include#define N 7200 /作 72xx 位的整数乘法int max(int,int,int);int initarray(int a);void write(int a,int l);FILE *fp;void main()int a5000=0,b5000=0,k10001=0; /声明存放乘数、被乘数与积的数组clock_t start, end; /声明用于计时的变量unsigned long c,d,e; / 声明作。

6、累加用的无符号长整数变量 int i,j,la,lb,ma,mi,p,q,t; / 声明其它变量 randomize(); / 初始化随机数.la=initarray(a); /产生被乘数,并返回其长度lb=initarray(b); /产生乘数,并返回其长度if(lala)?lb:la;for (q=0;q=0;i-) /累加斜线间的数, i 为横纵坐标之和c=d; /将前一位的进位标志存入累加变量cma=max(0,i-la+1,i-lb+1); /求累加的下限mi=(ila-1)?(la-1):i; /求累加的上限for(j=ma;j999)c%=1000; /取 c 的末三位ki=c;。

7、 /保存至表示乘积的数组ke=k0+1000*d; /求出乘积的最高位end = clock();/停止计时fp = fopen(result.txt, w+); /保存结果到 result.txtprintf(nThe elapsed time was: %3.4fn, (end - start) / CLK_TCK);/ 打印消耗的时间.fprintf(fp,%d,a0); /打印被乘数最高位write(a,la); /打印被乘数其他位fprintf(fp,%d,b0); /打印乘数最高位write(b,lb); /打印乘数其他位fprintf(fp,%ld,e); /打印乘积最高位wri。

8、te(k,la+lb-1); /打印乘积其他位fclose(fp);max(int a,int b,int c)int d;d=(ab)?a:b;return (dc)?d:c;int initarray(int a)int q,p,i;q=N+random(100);if(q%3=0)p=q/3;elsep=q/3+1;for(i=0;ip;i+)ai=random(1000);if(q%3=0)a0=100+random(900);if(q%3=2).a0=10+random(90);if(q%3=1)a0=1+random(9);return p;void write(int a,int l)int i;char string10;for(i=1;il;i+)itoa(ai,string,10);if (strlen(string)=1)fprintf(fp,00);if (strlen(string)=2)fprintf(fp,0);fprintf(fp,%s,string);if(i+1)%25=0)fprintf(fp,n);fprintf(fp,n);fprintf(fp,n);。

算法分析c语言大整数乘法,C语言中超大整数乘法运算相关推荐

  1. c语言乘法超过长整数,C语言中超大整数乘法运算

    <C语言中超大整数乘法运算>由会员分享,可在线阅读,更多相关<C语言中超大整数乘法运算(8页珍藏版)>请在人人文库网上搜索. 1.C 语言中超大整数乘法运算在计算机中,长整型 ...

  2. 用C语言计算超大乘法,C语言中超大整数乘法运算.docx

    C语言中超大整数乘法运算.docx .C 语言中超大整数乘法运算在计算机中,长整型 long int 变量的范围是 -2147483648 至 2147483647 ,因此若用长整型变量做乘法运算,乘 ...

  3. 大整数乘法c语言代码_大整数乘法

    大整数乘法和我们小学学过的乘法公式一样(如下图),就是按位相乘,两个数中的每一位彼此相乘,然后将相同列的结果加起来,最后统一处理进位即可. #include <iostream> #inc ...

  4. 大整数乘法---C语言实现

    一.前言 如上 二.内容 在科学计算中,无法计算非常大的整数,于是就有大整数乘法问题. (int存放4字节,float-已有的数据类型数据范围有限),硬件无法实现,只能靠软件(代码)实现了. 三.代码 ...

  5. c语言大作业参考书,C语言大作业设计-

    <C语言大作业设计->由会员分享,可在线阅读,更多相关<C语言大作业设计-(17页珍藏版)>请在人人文库网上搜索. 1.常州工学院c语言作业设计规格标题:通信记录管理系统二级学 ...

  6. c语言大作业旋转,c语言大作业全-20210412035629.docx-原创力文档

    Document number:PBGCG-0857-BTDO-0089-PTT1998 Document number:PBGCG-0857-BTDO-0089-PTT1998 C语言大作业全 #i ...

  7. 有输入和输出的c语言大作业题目,C语言大作业题目2011.pdf

    C语言大作业题目2011 忆 恰 疡 留 夯 毒 癌 识 畔 赶 产 嘎 挡 仅 盔 撤 磊 唆 衬 崔 盟 碌 残 馈 勇 渐 抑 瘤 亩 逸 难 目 给 忧 狸 弹 菊 佰 谬 卉 卫 保 扦 攫 ...

  8. C语言超牛简单源码计算超大整数的阶乘

    把开发过程中比较好的一些代码段记录起来,如下代码是关于C语言超牛简单计算超大整数的阶乘的代码,应该是对各位有些用途. #define N 400 long a[8916]={1,0},n,i,c,le ...

  9. python语言的取余运算符_Python 中用于整数除法取余的运算符是()_学小易找答案...

    [填空题]隐球菌病多由()传播. [单选题]下列选项中,哪一个符号是管道符号. ( ) [多选题]可采用分批法计算产品成本的企业有( ) [填空题]现有字符串 s="1234567" ...

最新文章

  1. HTTP 错误 500.19- Internal Server Error 错误解决方法
  2. 【深度学习】面向医学图像的病灶分割调研(二)
  3. h3c_rip附加相关视频
  4. php 升级php5,thinkphp5升级步骤
  5. python绘制滑稽脸_用Python画滑稽
  6. bzoj3144: [Hnoi2013]切糕(最小割)
  7. 快速提高看盘能力的十大方法
  8. Atitit.隔行换色  变色 css3 结构性伪类选择器
  9. 任正非《以客户为中心》
  10. php手册chm打开空白
  11. ie无法下载 无法打开该internet站点.请求的站点不可用或无法找到.请稍后重试
  12. java类名不能以数字开头_java变量为什么不能以数字开头
  13. html中重叠盒子之间的距离,div间距设置_div之间距离设置布局
  14. 13. nginx四层 https代理https 前后端证书配置
  15. KMS命令激活office2016
  16. Android 原生分享图片文字到微信
  17. javascript_ES6新特性
  18. 各向同性+随动硬化+过应力-vumat-理论推导
  19. 设计模式总是学不会?是时候换个姿势了
  20. excel表格分割线一分为二_Python与Excel交互——Xlwings

热门文章

  1. JAVA WEB如何让没有WebContent的eclipse可以正常在浏览器显示图片
  2. OEM“竞跑”:智能电动+本地化
  3. linux lsm实现进程白名单,linux安全模块学习之LSM的介绍实现
  4. 玄幻小说--仙界修仙
  5. uniapp把H5打包成ios
  6. node mysql框架_关于nodejs的框架选择
  7. js赋值、浅拷贝、深拷贝的区别
  8. oracle常见报错及解决方法
  9. vscode-PHP调试工具测试
  10. 层次聚类算法及通过python的scipy进行计算