关于大整数相乘
来源:互联网 发布:wtaps15aw军裤数据 编辑:程序博客网 时间:2024/06/03 20:45
由于int范围有限,对于大整数相乘必定不能直接用*符号,而是用char型数组记录,通过模拟乘法达到大整数相乘的效果,
假定a数组长度为A,b数组长度为B。求出来的大整数长度有三种可能,
1.A+B(最后一位无进位),
2.A+B+1(最后一位有进位),
3.0(数a或者数b其一为0)(不要忽略这种可能,我就是忽略了这个一直WA....)
代码如下,
void bigmultiply_methods(char *a, char *b, char *c) { int A = strlen(a), B = strlen(b), add, mul, i, j,k; //mul记录乘法进位,k记录加法进位for (j = 0; j < B; j++) {mul = 0;k = 0;for (i = 0; i < A; i++) {if (mul&&k) add = (a[A - 1 - i] - '0')* (b[B - 1 - j] - '0') + mul+k; //add为加上的数else if (!mul&&k) add = (a[A - 1 - i] - '0')* (b[B - 1 - j] - '0')+k ;else if (mul&&!k) add = (a[A - 1 - i] - '0')* (b[B - 1 - j] - '0') + mul;else add = (a[A - 1 - i] - '0')* (b[B - 1 - j] - '0'); if (add > 9) {mul = add / 10; c[j + i] += (add % 10);}else {mul = 0;c[j + i] += add;}if (c[j + i]>'9') {k = (c[j + i] - '0') / 10;c[j + i] = (c[j + i] - '0') % 10+'0';}else k = 0; //如果c[j+i]<='9',记得k清零,表示无加法进位了。}if (mul) c[j + i] += mul; //因为循环出来还有最后一位没有判断,故要再判断最后一位 if(k) c[j + i] += k;}if (c[j + i]!='0') c[j + i + 1] = '\0';else c[j + i] = '\0';//c数组要逆序输出}时间复杂度约为 O(AB).
希望大家有所收益,如果代码有问题或者有建议,我也希望一起交流进步呢。谢谢
0 0
- 关于大整数相乘
- 大整数相乘问题
- 大整数相乘算法
- 大整数相乘算法!
- 大整数相乘
- 大整数相乘算法
- 大整数相乘
- 大整数相乘
- 大整数相乘
- 大整数相乘
- 大整数相乘
- 大整数相乘算法
- 大整数相乘
- 大整数相乘
- 大整数相乘
- 大整数相乘
- 大整数相乘
- 两个大整数相乘
- 第12周项目2-Time类中的运算符重载
- 《人生》续集
- TwoNote录音笔记的使用
- Session的一点理解
- 彻底解决delphi Indy10接收邮件汉字显示乱码的问题
- 关于大整数相乘
- 设计模式学习之路(二) ——观察者模式
- linux C select函数学习
- 大话Binder机制
- 降低数据压力的几种解决方案
- longest-common-prefix 求字符串数组的最长公共前缀
- 唐巧大神的转场详解
- 深入学习java集合:ArrayList<E>实现
- ACM--移动桌子--贪心--HDOJ 1050--Moving Tables