解題思路:利用數組進行大數的相加。內置數據類型不能滿足整數位數的要求。
樣例:
1 999
999 1
#include#include using namespace std; int num1[1010],num2[1010]; int t[1010]; int result[1010]; char str1[1010],str2[1010]; void add(int len1,int len2) { int i,j; //字符轉換成數字,再反轉 for(i = 0;i < len1;i++) t[i] = str1[i] - 48; for(i = len1 - 1,j = 0;i >= 0;i--,j++) num1[j] = t[i]; for(i = 0;i < len2;i++) t[i] = str2[i] - 48; for(i = len2 - 1,j = 0;i >= 0;i--,j++) num2[j] = t[i]; int k = 0,temp,cnt = 0; i = 0; while(i < len1 || i < len2) { temp = num1[i] + num2[i] + cnt;//cnt表示進位 if(temp >= 10) { cnt = 1; result[i] = temp % 10; } else { result[k] = temp; cnt = 0; } i++; k++; } result[k] = cnt;//假如是99+99,則最後的進位1要記錄下來 for(i = 0;i < len1;i++) cout << str1[i]; cout << + ; for(i = 0;i < len2;i++) cout << str2[i]; cout << = ; if(result[k] != 0) cout << result[k]; int ii; for(ii = k-1;ii >= 0;ii--) { cout << result[ii]; } cout << endl; } int main(int argc, char *argv[]) { int s,cnt = 1; cin >> s; int a = s; while(s--) { memset(num1,0,sizeof(num1)); memset(num2,0,sizeof(num2));//每次都要初始化num1和num2 的數組,沒有則會WA memset(result,0,sizeof(result)); cin >> str1 >> str2; cout << Case << cnt << : << endl; add(strlen(str1),strlen(str2)); if(cnt < a) //最後的樣例沒有空行 cout << endl; cnt++; } return 0; }