2980:大整数乘法
时间限制:
-
1000ms
内存限制:
-
65536kB
描述
-
求两个不超过200位的非负整数的积。
输入
-
有两行,每行是一个不超过200位的非负整数,没有多余的前导0。
输出
-
一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
样例输入
-
12345678900
98765432100
样例输出
-
1219326311126352690000
#include<stdio.h>
#include<string.h>
int main()
{
int a[1000],b[1000],c[1000],i,j,k1,k2;
char st1[1000],st2[1000];
scanf("%s%s",st1,st2);
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
k1=strlen(st1);
k2=strlen(st2);
for(i=0;i<=k1-1;i++)
a[i]=st1[k1-i-1]-'0';
for(i=0;i<=k2-1;i++)
b[i]=st2[k2-i-1]-'0';
for(i=0;i<=k1-1;i++)
for(j=0;j<=k2-1;j++)
c[i+j]+=a[i]*b[j];
for(i=0;i<=k1+k2-1;i++)
{
if(c[i]>9)
{
c[i+1]+=c[i]/10;
c[i]=c[i]%10;
}
}
j=k1+k2;
while(c[j]==0&&j>0)
j--;
for(i=j;i>=0;i--)
printf("%d",c[i]);
printf("\n");
return 0;
}