高精度乘法

 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 }

 

posted @ 2017-01-05 17:24  佰大于  阅读(264)  评论(0编辑  收藏  举报