首页 > 代码库 > 高精度加法

高精度加法

 1 #include <stdio.h>
 2 #include <string.h>
 3 #define MAX 200                                                   //大数最长位数
 4 int main()
 5 {
 6     char str1[MAX];
 7     char str2[MAX];
 8     char ans[MAX+MAX+1];                                                //用char型节省空间
 9     int len1,len2,bit,i,flag;
10     memset(ans,0,sizeof(ans));
11     printf("Please input a big number:");
12     scanf("%s",str1);
13     printf("Please input another big number:");
14     scanf("%s",str2);
15     len1=strlen(str1)-1;
16     len2=strlen(str2)-1;
17     bit=0;
18     while(len1 >= 0 && len2 >= 0)                                //相同位数相加
19         ans[bit++]=str1[len1--]-0+str2[len2--]-0;
20     while(len1 >= 0)                                            //str1多出的位放在结果里面
21         ans[bit++]=str1[len1--]-0;
22     while(len2 >= 0)                                            //str2多出的位放在结果里面
23         ans[bit++]=str2[len2--]-0;
24     //deal jinwei
25     len1=strlen(str1);
26     len2=strlen(str2);
27     for(i=0;i<(len1>len2?len1:len2)+1;i++)                        //处理进位,结果最长不会超过最长的数字位数+1
28         if(ans[i]>=10)
29         {
30             ans[i+1]+=ans[i]/10;
31             ans[i]%=10;
32         }
33     //print
34         printf("%s + %s = ",str1,str2);
35     if(str1[0]=str2[0]==48)                                        //处理 0+0=0
36     {
37         printf("0 \n");
38         return 0;
39     }
40     flag=0;
41     for(bit=len1+len2-1;bit>=0;bit--)                            //倒找第一位,即第一个非 \0
42     {
43         if(ans[bit] != \0) flag=1;
44         if(flag) printf("%d",ans[bit]);
45     }
46     putchar(\n);
47     return 0;
48 }
49 
50  

 

高精度加法