大整数相加 a+b 的c语言实现

终于来到我所期盼的高精度整数相加的题目了。这个题很经典,也算是一个很好的算法入门题吧。

如果是java的话,系统类库已经内置了BigInteger类,直接调用就可以很轻易地解决了。但是学习c的编写也是非常有意义的。

解题思路

1、首先用两个数组s1,s2临时存放输入的数据

2、输入以后将两个数组s1、s2以si[i]-'0'的方式把输入的字符串型数字转化为int型的数字。

      注意转换的过程中,要倒过来存,以便相加的时候低位的对齐,从低位开始相加。

3、相加的过程:同位相加,相加的结果存放在num1[i]里。如果结果>10,num[i+1]要进位(+1),并且num1[i]存放结果-10(只存放个位)

4、输出时:相加的过程中变量i一直向后移,到了最后会停在max(len(s1),len(s2))+1的位置。如果前面的加法恰好在最高位也进1,此时num1[i]就不为零。此时就要把这个多出来的高位也输出。反则不需要输出。

其他详解看代码注释。

 1 #include<stdio.h>
 2 #include<string.h>
 3 int main()
 4 {
 5     char s1[1000],s2[1000];
 6     int num1[1000],num2[1000],len1,len2,i,j;
 7     memset(num1,0,sizeof(num1));
 8     memset(num2,0,sizeof(num2));
 9     while(scanf("%s%s",s1,s2)!=EOF)
10     {
11         len1=strlen(s1);
12         len2=strlen(s2);
13         for(i=len1-1,j=0; i>=0; --i) //从后往前处理大数字符串,把字符串变成数字组
14         {
15 
16             num1[j]=s1[i]-'0';
17             j++;
18 
19         }
20         for(i=len2-1,j=0; i>=0; --i)
21         {
22             num2[j]=s2[i]-'0';
23             j++;
24 
25         }
26         //相加的处理,把num2的数加到i1中。进位加1,原超数-10
27 
28         for(i=0; i<(len2>len1?len2:len1); i++)
29         {
30             num1[i]+=num2[i];
31             if(num1[i]>9)
32             {
33                 num1[i+1]+=1;
34                 num1[i]-=10;
35             }
36         }
37         if(num1[i])//如果最后一位不为0,把溢出来的那一位也输出。输出倒着输
38             for(j=i; j>=0; j--)
39                 printf("%d",num1[j]);
40         else for(j=i-1; j>=0; j--)//如果最后一位为0,最高位不需要输出。
41                 printf("%d",num1[j]);
42         memset(num1,0,sizeof(num1));
43         memset(num2,0,sizeof(num2));
44         printf("
");
45     }
46     return 0;
47 }
原文地址:https://www.cnblogs.com/AKsnoopy/p/8310426.html