大整數相加 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("\n");
45     }
46     return 0;
47 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM