Problem Description
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 Output
Case 1: 1 + 2 = 3 Case 2: 112233445566778899 + 998877665544332211 = 1111111111111111110
像大数这一类题目一般都是用 string 来做, 这个题首要把两个字符串用 reverse 倒序过来运算(由于数字运算是从个位,十位 .....)。最后再倒序回来。
注意:1.这里的运算并不是字符间直接运算,而是转化成 int 型在加减运算。
2.转化成 int 型的两个数运算后可能出现超过 10 ,一定要记得进位。
- #include<iostream>
- #include<string>
- using namespace std;
- char add(char temps,char tempstr,int &tempaddc)
- {
- int temp;
- temp = (temps - '0') + (tempstr - '0') + tempaddc; //实现进位。
- tempaddc = temp / 10; // 算出进位数
- return temp % 10 + '0';
- }
- int main()
- {
- string str,s;
- int tempaddc;
- char c;
- int n,lenstr,lens;
- while(cin>>n)
- {
- while(n--)
- {
- cin>>str>>s;
- tempaddc = 0;
- c = '0';
- if(s.length() > str.length())swap(s,str);
- lenstr = str.length();
- lens = s.length();
- lens--;
- lenstr--;
- while (lenstr >= 0)
- {
- if(lens < 0) str[lenstr] = add(c,str[lenstr],tempaddc); //字符串长度较长部分的计算
- else
- {
- str[lenstr] = add(s[lens],str[lenstr],tempaddc);
- lens--;
- }
- lenstr--;
- }
- cout<<str<<endl;
- }
- }
- return 0;
- }