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 }

posted on 2012-08-03 08:02  mycapple  阅读(236)  评论(0编辑  收藏  举报

导航