算法分析与设计大整数乘法代码_精品文档.doc
- 文档编号:220810
- 上传时间:2022-10-06
- 格式:DOC
- 页数:5
- 大小:15KB
算法分析与设计大整数乘法代码_精品文档.doc
《算法分析与设计大整数乘法代码_精品文档.doc》由会员分享,可在线阅读,更多相关《算法分析与设计大整数乘法代码_精品文档.doc(5页珍藏版)》请在冰豆网上搜索。
#include
intmain()
{
chara[100],b[100],s[202];
intn,i,j,g,t=0,k=1,temp;
scanf("%d",&n);
n--;
scanf("%s%s",&a,&b);
while(k<=2*n)
{
s[k]=0;
temp=0;
for(i=0;i<=n;i++)
{
for(j=0;j<=n;j++)
{
if((i+j)==k-1)
temp+=(a[n-i]-48)*(b[n-j]-48);
}
}
g=(temp+t)%10;
t=(temp+t)/10;
s[k]=g;
k++;
}
temp=0;
for(i=0;i<=n;i++)
{
for(j=0;j<=n;j++)
if((i+j)==k-1)
temp+=(a[n-i]-48)*(b[n-j]-48);
}
temp+=t;
printf("%d",temp);
for(i=2*n;i>0;i--)
printf("%d",s[i]);
printf("\n");
return0;
}
//两个100位以内的如果小了自己将数组改一下
设X和Y是两个n位的整数,假定n是2的整数次幂。
把每个整数分为两部分,每部分为n/2位,则X和Y可重写为X=x1*10n/2+x0和Y=y1*10n/2+y0,X和Y的乘积可以计算为
X*Y=(x1*10n/2+x0)*(y1*10n/2+y0)
=X1*Y1*10n+((x1+x0)*(y1+y0)-x1*y1-x0*y0)*10n/2+x0*y0
由此体现了分治递归的思想,将大整数化小,规模也变小。
源代码如下:
#include
#include
intn,x,y,rt;//全局变量
voidinput()
{
cout<<"两个乘数的位数是n,请输入n的值(n是2的整数次幂):
";
cin>>n;
cout< "< cout<<"x="; cin>>x; cout<<"y="; cin>>y; } intcalculate(inta,intb)//计算数值函数--循环体 { inttemp1,temp2; longs; intx1,x0,y1,y0; if(n>1)//可以分治算法的条件 { temp1=(int)pow(10,n/2); temp2=(int)pow(10,n); x1=a/temp1;//x值的前半部分 x0=a-x1*temp1;//x值的后半部分 y1=b/temp1;//y值的前半部分 y0=b-y1*temp1;//y值的后半部分 n=n/2;//经过一次分治后,数的位数减半 s=calculate(x1,y1)*temp2+(calculate(x1+x0,y1+y0)-calculate(x1,y1)-calculate(x0,y0))*temp1+calculate(x0,y0); } else returna*b; returns; } voidprint()//输出函数 { cout<<"乘数x="< cout<<"结果rt="<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 分析 设计 整数 乘法 代码 精品 文档