ZJU 1217 大数相乘

 1 #include<stdio.h>

 2 #include<string.h>

 3 int main()

 4 {

 5     char a[220],b[220];

 6     int m[220],n[220],c[440];

 7     int i,j,k,t,la,lb,signa,signb;

 8     char *pa,*pb;

 9     while(1)

10     {

11         signa=signb=0;

12         scanf("%s%s",a,b);

13         pa=a;pb=b;

14         if(a[0]=='-') {signa=1;pa++;}//若是负数,则标志位signa为1 

15         if(b[0]=='-') {signb=1;pb++;}

16         while(*pa=='0') pa++;//消0过程 

17         while(*pb=='0') pb++;

18         if(!((*pa)||(*pb))) return 0;//都为0情况 

19         if(!(*pa&&*pb)) {puts("0");continue;}//只有一个为0情况 

20         la=strlen(pa);lb=strlen(pb);

21         printf("%d  %d\n",la,lb);

22         memset(m,0,sizeof(m));

23         memset(n,0,sizeof(n));

24         memset(c,0,sizeof(c));

25         for(i=0;i<la;++i)

26         m[i]=pa[la-i-1]-'0';

27         for(i=0;i<lb;++i)

28         n[i]=pb[lb-i-1]-'0';

29         for(i=0;i<la;++i)

30             for(j=0;j<lb;++j)

31                 c[i+j]+=m[i]*n[j];

32         for(i=t=0;i<la+lb;++i)

33         {

34             k=c[i]+t;

35             c[i]=k%10;

36             t=k/10;

37         }

38         if(signa!=signb) putchar('-');

39         for(i=la+lb-1;!c[i];i--);

40         while(i+1)

41         printf("%d",c[i--]);

42         putchar('\n');

43     }

44     return 0;

45 }

你可能感兴趣的:(ZJU 1217 大数相乘)