題目描述ios
谷學長有一個很是簡單的問題給你,給你兩個整數A和B,你的任務是計算A+B。數組
輸入測試
輸入的第一行包含一個整數T(T<=20)表示測試實例的個數,而後2*T行,分別表示A和B兩個正整數。注意整數很是大,那意味着你不能用32位整數來處理。你能夠肯定的是整數的長度不超過1000。spa
輸出code
對於每個樣例,你應該輸出兩行,第一行是"Case #:",#表示第幾個樣例,第二行是一個等式"A+B=Sum",Sum表示A+B的結果。注意等式中有空格。blog
樣例輸入ci
2 string
1 2io
112233445566778899 998877665544332211class
樣例輸出
Case 1: 1 + 2 = 3
Case 2: 112233445566778899 + 998877665544332211 = 1111111111111111110
提示
大數加法問題,在大數運算裏面相對還算簡單,不過對初學者博主來講,思路清晰,不過寫代碼能力明顯就有點跟不上了。
下面咱們來分析下吧:
前面的Case什麼的只要把相應已知數據輸出便可,下面咱們重點來分析下加法的結果
首先咱們看他的輸入,是連續輸入,即這個大數字各個位之間是沒有空格的,這就意味着用整型的數組難以實現數據的輸入問題。所以咱們考慮用字符型數組解決輸入問題。
這裏方便起見;咱們輸入字符數組a爲「98」,b爲「9」 來分析下思路。
原理就是模擬小學加法,要作加法,首先每位數字應對齊,纔可對應相加。所以,咱們考慮定義字符數組 char c[1001]來轉移並對齊a,b中的元素;
cin>>a; "98"
代碼以下:
#include<iostream> #include<cstring> using namespace std; char a[1001],b[1001]; void Add()//字符加法 { char c[1001]; memset(c,'0',1001); for(int i=0;i<strlen(a);i++)//對齊 { c[i]=a[strlen(a)-1-i]; } memset(a,'0',1001); for(int i=0;i<strlen(b);i++) { a[i]=b[strlen(b)-1-i]; } for(int i=0;i<1000;i++) { a[i]+=c[i]-'0'; if(a[i]>'9') { a[i]-=10; a[i+1]++; } } } int main() { int T,n=0; cin>>T; while(T--) { n++; memset(a,'0',1001); memset(b,'0',1001); cin>>a>>b; cout<<"Case "<<n<<":"<<endl; cout<<a<<" + "<<b<<" = "; Add(); int k; for(k=1000;k>=0;k--)//排前導0 { if(a[k]!='0') {break;} } for(int i=k;i>=0;i--) { cout<<a[i]; } cout<<endl; } return 0; }