大整數相加 a+b 的c語言實現
阿新 • • 發佈:2018-01-18
pos -i += 有意義 size 大整數 int max 輸入
終於來到我所期盼的高精度整數相加的題目了。這個題很經典,也算是一個很好的算法入門題吧。
如果是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 }
大整數相加 a+b 的c語言實現