大数(非负数)的乘法
来源:互联网 发布:java url 转码na 编辑:程序博客网 时间:2024/05/17 08:58
数据(整数)较小时我们会用int,int64_t来表示数据,可他毕竟是有一定范围的。如果我们想要去计算很大的数,又该怎么办?大数运算实际上就是运用了我们手算乘法的方法,对每一位字符进行处理。所以,我们就用字符串来表示两个要相乘的大数,运用字符串对每个字符进行处理。例如:用a[ ],b[ ]数组分别表示两个数;模拟手算时会有进位,所以我们用carry来表示进位;用ans[ ]数组表示结果 7 4 3 8 a数组x 2 4 b数组————————————
2 9 7 5 2 第一次计算时先把第一次的结果保存在ans数组中
1 4 8 7 6 第二次计算时在ans数组的基础上进行计算
————————————
1 7 8 5 1 2 最后输出结果
这样计算数组下标会很混乱,所以最好先将数组反转,这样我们就很容易计算;
所以
3 2 1 0 下标
7 4 3 8 a数组
x 2 4 b数组
————————————
2 9 7 5 2 第一次计算时先把第一次的结果保存在ans数组中
1 4 8 7 6 第二次计算时在ans数组的基础上进行计算
————————————1 7 8 5 1 2 最后输出结果5 4 3 2 1 0 下标代码附上:
/* * 大数(非负整数)的四则运算: * 运用字符串来处理 * */#include <stdio.h>#include <stdlib.h>#include <string.h>#define LEN 17static char a[LEN],b[LEN],ans[LEN];char *myrever(char *str) //反转字符串函数{ int t,tl=strlen(str); char ch; for(t=0;t<tl/2;t++) { ch=str[t]; str[t]=str[tl-t-1]; str[tl-t-1]=ch; } return(str);}void multiplication() //大数乘法函数{ int carry=0,ta=strlen(a),tb=strlen(b),i,j,sum; int tl=(ta<tb)?ta:tb; myrever(a); myrever(b); memset(ans,48,sizeof(ans)); //特别要考虑到乘数有“0”的情况 if(strcmp("0",a)==0||strcmp("0",b)==0) { ans[1]=0; return; } for(i=0;i<tl;i++) { if(ta<=tb) { for(j=0;j<tb;j++) { sum=ans[j+i]-48; ans[j+i]=(sum+(a[i]-48)*(b[j]-48)+carry)%10+48; carry=(sum+(a[i]-48)*(b[j]-48)+carry)/10; } }else{ for(j=0;j<ta;j++) { sum=ans[j+i]-48; ans[j+i]=(sum+(a[j]-48)*(b[i]-48)+carry)%10+48; carry=(sum+(a[j]-48)*(b[i]-48)+carry)/10; } } if(carry!=0) { ans[j+i]=carry+48; carry=0; } } if(ans[ta+tb-1]==48) ans[ta+tb-1]=0; else ans[ta+tb]=0; myrever(ans);}int main(){ scanf("%s%s",a,b); multiplication(); //乘法 printf("%s\n",ans); return 0;}
0 0
- 大数(非负数)的乘法
- COJ 1328 大数乘法(包括负数的)
- 大数的乘法(正数)
- 高精度大数(负数)
- 用C语言写的超长的大数乘法,不支持负数,新手上路请多指点
- 大数加法(考虑负数)
- 大数的乘法(包括浮点数)
- 大数乘法的实现
- 大数的乘法
- 1027 大数的乘法
- 大数乘法的实现
- 大数乘法的实现
- 大数的乘法
- 大数的乘法
- 大数的乘法
- 大数的乘法
- OJ 大数的乘法
- 两位数的大数乘法
- MFC中的MoveWindow and SetWindowPos
- 2015中国安防行业调查报告
- [LeetCode]238. Product of Array Except Self
- NLP系列(3)_用朴素贝叶斯进行文本分类(下)
- 让我们红尘作伴活得潇潇洒洒
- 大数(非负数)的乘法
- 一个在办公室看看大盘指数的小程序
- 总结const的用法
- 数据预处理
- Fuse学习<1>
- ES6学习——新加API:Array
- 别了,晴雨的回忆
- Rocchio 算法
- Tomcat 启动错误整理1