hdu 1002

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值