# hdu 1002

264人阅读 评论(0)

/*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

*/

#include<iostream>
#include<stdlib.h>
using namespace std;
int main(){
int T,countm,countn;
cin>>T;
if(1 <= T && T <= 20){
int i = 1,max; //max用于记录SUM的长度
char m[1000],n[1000];
int SUM[1000];
while(i++ <= T){
bool flag = false; //用于标识进位
cin>>m>>n;
countm = strlen(m);
countn = strlen(n);
if(countm > countn){
max = countm;
for(int k = 0; k < countm; k++){SUM[k] = int(m[k]-'0');}
for(int j = 1; j <= countn; j++){
if(flag){SUM[countm-j] = int(m[countm-j]-'0') + int(n[countn-j]-'0') + 1;} //两数相加，若前面有进位则再加1
else{SUM[countm-j] = int(m[countm-j]-'0') + int(n[countn-j]-'0');}
if(SUM[countm-j]>=10){ //若结果大于10则进位
SUM[countm-j] -= 10;
flag = true;
}
else{
flag = false;
}
}
int item = countm-countn-1;
while(flag && item >= 0){
SUM[item]++;
if(SUM[item] >= 10 && item != 0){
SUM[item] -= 10;
flag = true;
}
else{flag = false;}
item --;
} //若最高位还有进位
}

else if(countm < countn){//
max = countn;
for(int k = 0; k < countn; k++){SUM[k] = int(n[k]-'0');}
for(int j = 1; j <= countm; j++){
if(flag){SUM[countn-j] = int(m[countm-j]-'0') + int(n[countn-j]-'0') + 1;} //两数相加，若前面有进位则再加1
else{SUM[countn-j] = int(m[countm-j]-'0') + int(n[countn-j]-'0');}
if(SUM[countn-j]>=10){ //若结果大于10则进位
SUM[countn-j] -= 10;
flag = true;
}
else{
flag = false;
}
}
int item = countn-countm-1;
while(flag && item >= 0){ //循环进位，避免999+1的情况！
SUM[item]++;
if(SUM[item] >= 10 && item != 0){
SUM[item] -= 10;
flag = true;
}
else{flag = false;}
item --;
} //若最高位还有进位
}

else{
max = countm;
for(int k = 0; k < countm; k++){SUM[k] = int(m[k]-'0');}
for(int j = 1; j <= countm; j++){
if(flag){SUM[countn-j] = int(m[countm-j]-'0') + int(n[countn-j]-'0') + 1;} //两数相加，若前面有进位则再加1
else{SUM[countn-j] = int(m[countm-j]-'0') + int(n[countn-j]-'0');}
if(SUM[countn-j]>=10 && countn-j != 0){ //若结果大于10则进位
SUM[countn-j] -= 10;
flag = true;
}
else{
flag = false;
}
}
}
cout<<"Case "<<i-1<<":"<<endl;
cout<<m<<" + "<<n<<" = ";
int k = 0;
while(k!= max){
cout<<int (SUM[k++]);
}
if(i <= T - 1)
cout<<endl<<endl;
else
cout << endl;
}
}
system("pause");
return 0;
}

0
0

* 以上用户言论只代表其个人观点，不代表CSDN网站的观点或立场
个人资料
• 访问：11277次
• 积分：244
• 等级：
• 排名：千里之外
• 原创：14篇
• 转载：2篇
• 译文：0篇
• 评论：0条
评论排行