您的位置:首页 > 其它

大数相乘模板

2018-04-04 17:01 176 查看
大数相乘模板代码如下:#include<stdio.h>
#include<string.h>
#define MAX 100
char a[MAX],b[MAX];
int aa[10005],len;//aa[]保存相乘后的结果,len来相乘后的保存数据的长度 (正序)
void Multplay(){
int x[MAX+10]={0},y[MAX+10]={0},z[MAX*2+10]={0};
int len1,len2,i,j;
len1=strlen(a);
len2=strlen(b);

for(j=0,i=len1-1;i>=0;i--) //将a[]转换为整形数组 (逆序倒序储存)
x[j++]=a[i]-'0';
for(j=0,i=len2-1;i>=0;i--) //将b[]转换为整形数组 (逆序倒序储存)
y[j++]=b[i]-'0';

for(i=0;i<len1;i++) //将因数各个位上的数字与另一个各个位上的数字相乘
{
for(j=0;j<len2;j++)
z[i+j]=z[i+j]+x[i]*y[j];//先乘起来,后面统一进行进位
}

for(i=0;i<MAX*2;i++) //进行进位
{
if(z[i]>=10)
{
z[i+1]=z[i+1]+z[i]/10;
z[i]=z[i]%10;
}
}

for(i=MAX*2;i>0;i--)
{
if(z[i]==0)
continue;
else
break;
}
len=0;
for(;i>=0;i--)
aa[len++]=z[i];
}
int main()
{
while(~scanf("%s%s",a,b))
{
memset(aa,0,sizeof(aa));
Multplay();
for(int i=0;i<len;i++)
printf("%d",aa[i]);
printf("\n");
}

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