1. 程式人生 > >大整數加法 A + B

大整數加法 A + B

problem 使用 for sum != cst class 思路 cas

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