关闭

hdu 1002

标签: integeroutputeachinputsystem
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条