您的位置:首页 > 其它

【分治算法】大整数乘法

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验证:



结果是一样的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: