【分治算法】大整数乘法
2017-11-16 11:57
295 查看
大整数的乘法 在计算机中,长整形(long int)变量的范围不能超过10位数。即便用双精度(double)变量,也仅能保证16位有效数字 的精度。在某些需要更高精度的乘法运算场合,需要用别的办法来实现运算。 比较容易想到的是做多位数乘法时列竖式进行计算的方法, 只要写出模拟这一过程的程序, 就能实现任意大整数的乘法运算。 经过查阅资料, 找到一种更易于编程的方法, 即“列表法”。
下面先介绍“列表法”:
例如当计算8765*234时,把乘数和被乘数照如下列出,见表1:
源代码:
#include<iostream> #include<string> using namespace std; int main() { string a; string b; cin>>a>>b; int lena=a.size(); int lenb=b.size(); int* tmp=new int[lena+lenb]; for(int y=0;y<lena+lenb;y++) { tmp[y]=0; } int* C=new int[lena+lenb]; for(int i=0;i<lenb;i++) { for(int j=0;j<lena;j++) { tmp[j+i]=tmp[j+i]+(int(b[i])-48)*(int(a[j])-48); } } int ii=0; for(int k=lena+lenb-2;k>=0;k--) { if(tmp[k]>=10 && k>=1) { tmp[k-1]=tmp[k-1]+tmp[k]/10; C[ii]=tmp[k]%10; ii++; } else if(tmp[k]<10 && k>=1) { C[ii]=tmp[k]; ii++; } else { if(tmp[0]>=10) { C[ii]=tmp[0]%10; ii++; C[ii]=tmp[0]/10; } else C[ii]=tmp[0]; } } for(int h=ii;h>=0;h--) { cout<<C[h]<<""; } return 0; }
输入与输出
用Python验证:
结果是一样的
相关文章推荐
- 分治算法之大整数乘法--big mutiply
- 分治算法——大整数乘法(multiplication of large integers)
- [大整数乘法]分治算法的时间复杂度研究
- 用分治算法编程实现两个n位十进制大整数的乘法运算
- 分治算法--大整数乘法
- 分治算法-大整数乘法
- 五大常用算法(一) 分治算法(2) 大整数乘法
- 百练oj2980 大整数乘法
- 大整数乘法
- 高精度(正整数的加、减、乘法)
- 【CodeVS 3123】 高精度练习之超大整数乘法
- poj2389 大整数乘法
- 大整数的乘法问题
- 大整数乘法的Karatsuba算法实现
- 1185 威佐夫游戏 V2 博弈论 + 大整数乘法
- 第十六节 机试题之大整数减法与乘法
- 华为面试题目大整数乘法java代码
- AtCoder Beginner Contest 085 C Otoshidama(计算机整数乘法问题+方程求解)
- 大整数乘法以及空间性能优化
- cv3123 高精度练习之超大整数乘法(FFT)