Description
求两个不超过200位的非负整数的积。
Input
有两行,每行是一个不超过200位的非负整数,没有多余的前导0。
Output
一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
Sample Input
12345678900
98765432100
Sample Output
1219326311126352690000
代码:
#include<stdio.h>
#include<string.h>
int main(int argc, char *argv[])
{
int a[200],b[200],c[400]={0},i,j,m,l,k,t,h;
char aa[200],bb[200];
scanf("%s%s",&aa,&bb);
l=strlen(aa);
t=strlen(bb);
for(m=0,j=l-1;j>=0;j--,m++)
a[m]=aa[j]-'0';
for(m=0,j=t-1;j>=0;j--,m++)
b[m]=bb[j]-'0';
//上面的处理和大整数加法一样!这里就不多说了!
for(i=0;i<l;i++)
for(j=0;j<t;j++)
c[i+j]+=a[i]*b[j]; //理解这里是关键!
//同样这里是把超过10的进位!!
for(i=0;i<l+t;i++)
if(c[i]>=10)
{
c[i+1]=c[i+1]+c[i]/10;
c[i]%=10;
}
for(i=l+t-1;i>=0;i--)
if(c[i]==0)continue;
//上面是把有前导0的数去掉!
else {k=i;break;}
if(i == -1)printf("0");
for(i=k;i>=0;i--)
printf("%d",c[i]);
printf("\n");
return 0;
}
网友评论