大数乘法

给出2个大整数A,B,计算A*B的结果。


Input
第1行:大数A
第2行:大数B
(A,B的长度 <= 1000,A,B >= 0)

Output
输出A * B


Input示例

123456
234567


Output示例

28958703552


解题思路

倒序储存,完成下面过程即可
123x31=3813

  3 2 1
x   1 3
-------------
  3 9 6 3
+   2 1
-------------
  3 1 8 3

核心代码

for(i=0;i<len1;i++)
        for(j=0;j<len2;j++)
        {
            c[i+j]+=a[i]*b[j];
            if(c[i+j]>9)
            {
                c[i+j+1]+=c[i+j]/10;
                c[i+j]%=10;
            }
        }

完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <string.h>
#define MAX 10010
int ()
{
char s1[MAX],s2[MAX];
int a[MAX],b[MAX];
int len1,len2,i,j;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
scanf("%s%s",s1,s2);
len1=strlen(s1);
len2=strlen(s2);
for(i=0;i<len1;i++)
a[len1-1-i]=s1[i]-'0';
for(i=0;i<len2;i++)
b[len2-1-i]=s2[i]-'0';
int c[MAX];
memset(c,0,sizeof(c));
for(i=0;i<len1;i++)
for(j=0;j<len2;j++)
{
c[i+j]+=a[i]*b[j];
if(c[i+j]>9)
{
c[i+j+1]+=c[i+j]/10;
c[i+j]%=10;
}
}
for(i=MAX-1;i>0;i--)
if(c[i] != 0) break;
for(;i>=0;i--)
printf("%d",c[i]);
printf("n");
return 0;
}