1.13.9

09:大整数乘法

描述

求两个不超过200位的非负整数的积。

输入有两行,每行是一个不超过200位的非负整数,没有多余的前导0。输出一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。样例输入

12345678900
98765432100

样例输出

1219326311126352690000

来源程序设计实习2007

 1 #include <cstdio>
 2 #include <cstring>
 3 using namespace std;
 4 char a1[300],b1[300];
 5 int a[300],b[300],c[30000],lena,lenb,lenc,i,j,x;
 6 int main()
 7 {
 8     gets(a1);
 9     gets(b1);
10     lena=strlen(a1);lenb=strlen(b1);
11     for(i=0;i<lena;i++)a[lena-i]=a1[i]-48;
12     for(i=0;i<lenb;i++)b[lenb-i]=b1[i]-48;
13     for(i=1;i<=lena;i++)
14     {
15         x=0;
16         for(j=1;j<=lenb;j++)
17         {
18             c[i+j-1]=a[i]*b[j]+x+c[i+j-1];
19             x=c[i+j-1]/10;
20             c[i+j-1]%=10;
21         }
22         c[i+lenb]=x;
23     }
24     lenc=lena+lenb;
25     while(c[lenc]==0&&lenc>1)
26     lenc--;
27     for(i=lenc;i>=1;i--)
28     printf("%d",c[i]);
29     return 0;
30 }

 

posted @ 2017-01-11 20:37  lxzyzby  阅读(199)  评论(0)    收藏  举报