C++解決大整數加法
阿新 • • 發佈:2019-01-22
c++解決大整數加法
問題描述:求兩個不超過200為的非負整數的和
輸入資料:輸入有兩行,每行是一個不超過200位的非負整數,沒有多於的前導0.
輸出要求:輸出只一行,即相加後的結果。結果裡不能有多於的前導0,即如果結果是342,那麼就不能輸出0342.
輸入樣例:
2222222222222222222222222
3333333333333333333333333
輸出樣例:
5555555555555555555555555
解題思路:int型別資料最多10位,double型別資料最多64位,因此,不能直接利用int或double型別資料相加求解。應考慮用陣列(為方便讀入資料,採用字元陣列),採用列豎式的思路,對位相加,在考慮進位,最終求解。
C++程式碼如下:
#include<iostream> #include<cstring> using namespace std; int main() { //定義變數 char x1[200]={'\0'};//兩個不超過200位的加數 char x2[200]={'\0'}; int carry[201]={0};//進位 int result[201]={0};//和 int i;//迴圈變數 //輸入 cin>>x1>>x2; //求兩char陣列長度 int len1=strlen(x1); int len2=strlen(x2); //反序 strrev(x1); strrev(x2); //確定兩序列長度的最大值 int lenmax=len1*(len1>=len2)+len2*(len1<len2); //把char型別的加數陣列轉化為int int x11[200]={0}; for(i=0;i<=len1-1;i++) { x11[i]=x1[i]-'0'; } int x22[200]={0}; for(i=0;i<=len2-1;i++) { x22[i]=x2[i]-'0'; } //不考慮進位對應位相加 for(i=0;i<=lenmax-1;i++) { result[i]=x11[i]+x22[i]; result[i+1]=0;//用於防止超過lenmax後的一位 } //考慮進位 完成最終求和 for(i=0;i<=lenmax+1;i++) { carry[i+1]=result[i]/10; result[i]=result[i]%10+carry[i]; } //若最高位為0,則不輸出最高位 if(result[lenmax]==0) i=lenmax-1; else i=lenmax; for(;i>=0;i--) cout<<result[i]; cout<<endl; return 0; }