Description
求兩個(gè)不超過200位的非負(fù)整數(shù)的積。
Input
有兩行,每行是一個(gè)不超過200位的非負(fù)整數(shù),沒有多余的前導(dǎo)0。
Output
一行,即相乘后的結(jié)果。結(jié)果里不能有多余的前導(dǎo)0,即如果結(jié)果是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';
//上面的處理和大整數(shù)加法一樣!這里就不多說了!
for(i=0;i<l;i++)
? ? for(j=0;j<t;j++)
? ? ? ? c[i+j]+=a[i]*b[j];????????//理解這里是關(guān)鍵!
//同樣這里是把超過10的進(jìn)位??!
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;
//上面是把有前導(dǎo)0的數(shù)去掉!
else {k=i;break;}
if(i == -1)printf("0");
for(i=k;i>=0;i--)
printf("%d",c[i]);
printf("\n");
return 0;
}