大整數加法 A + B
A + B
I have a very simple problem for you. Given two integers A and B, your job is to calculate the Sum of A + B
input
The first line of the input contains an integer T(1<=T<=20) which means the number of test cases. Then T lines follow, each line consists of two positive integers, A and B. Notice that the integers are very large, that means you should not process them by using 32-bit integer. You may assume the length of each integer will not exceed 1000.
output
For each test case, you should output two lines. The first line is "Case #:", # means the number of the test case. The second line is the an equation "A + B = Sum", Sum means the result of A + B. Note there are some spaces int the equation. Output a blank line between two test cases.
sample input
2
1 2
112233445566778899 998877665544332211
sample input
Case 1:
1 + 2 = 3
Case 2:
112233445566778899 + 998877665544332211 = 1111111111111111110
思路:使用字符串儲存兩個大數據,再用一個數組c來儲存他們的和,用變量p,q分別指向他們的個位數,因為是從左到右輸入的,所以是從strlen(a) - 1開始,將其個位數相加,使用sum儲存,sum%10儲存在c中sum/10補在下一位,一直循環到p和q等於0,註意當其中一個為0時停止其對應相加。
#include <iostream> #include<cstring> #include <cstdio> using namespace std; char a[1005], b[1005]; int c[1005]; int main() { int t; cin >> t; for(int i = 1; i <= t; i++) { memset(a, ‘0‘, sizeof(a)); memset(b, ‘0‘, sizeof(b)); memset(c, 0, sizeof(c)); getchar(); cin >> a >> b; int sum = 0; int p = strlen(a) - 1, q = strlen(b) - 1; int k = 0; while(1) { if(p >= 0 && q >= 0) sum = a[p] - 48 + b[q] - 48 + sum; if(p < 0 && q >= 0) sum = + b[q] - 48 + sum; if(p >= 0 && q < 0) sum = a[p] - 48 + + sum; c[k++] = sum%10; sum = sum/10; if(p < 0 && q < 0)break; p--; q--; } cout << "Case " << i << ‘:‘; cout << endl; for(int j = 0; j < strlen(a); j++) cout << a[j]; cout << " + "; for(int j = 0;j < strlen(b); j++) cout << b[j]; cout << " = "; for(int j = k - 2; j >= 0; j--) cout << c[j]; cout << endl; if(i != t)cout << endl; } return 0; }
大整數加法 A + B