1 #include <stdio.h>
2 #include<string.h>
3 #define MAX 200 //最大位数
4 int main()
5 {
6 int j,k;
7 int len1,len2,len,flag;
8 int c1[MAX],c2[MAX],ans[MAX+MAX+1]; //int存储大数
9 char d1[MAX+1],d2[MAX+1]; //读入大数
10 memset(ans,0,sizeof(ans)); //方便输出结果
11 printf("Please input a big number:");
12 scanf("%s",d1);
13 printf("Please input another big number:");
14 scanf("%s",d2);
15 len1=strlen(d1);
16 len2=strlen(d2);
17 j=0;
18 k=len1-1;
19 while(d1[j] != '\0') //转换成数字存放在int数组
20 c1[k--]=d1[j++]-'0';
21 j=0;
22 k=len2-1;
23 while(d2[j] != '\0') //转换成数字存放在int数组
24 c2[k--]=d2[j++]-'0';
25 //处理因子为0
26 if(!c1[len1-1] || !c2[len2-1] )
27 {
28 printf("%s * %s = 0\n",d1,d2);
29 return 0;
30 }
31 //乘法
32 for(k=0; k<len2; k++)
33 for(j=0; j<len1; j++)
34 ans[k+j]+=c1[j]*c2[k]; //列竖式
35 //处理进位
36 len=len1+len2+1; //结果位数不能超过两个数字位数和+1
37 for(k=0; k<len; k++)
38 if(ans[k]>=10)
39 {
40 ans[k+1]+=ans[k]/10;
41 ans[k]%=10;
42 }
43 //输出结果
44 printf("%s * %s = ",d1,d2);
45 flag=0;
46 while(len--)
47 {
48 if(ans[len]!=0)
49 flag=1;
50 if(flag)
51 printf("%d",ans[len]);
52 }
53 putchar('\n');
54 return 0;
55 }