hdu 1002

原创 2012年03月25日 18:23:30
/*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;
}



hdu1002大数相加

  • 2014年12月16日 12:44
  • 877B
  • 下载

HDU_ACM_1002_大数相加C源代码

  • 2012年04月19日 19:21
  • 1KB
  • 下载

HDU5259(百度之星复赛1002)——弹吉他(DP)

题目连接题目分析这是一道比较典型的DP题目,但是题目的状态数量比较多,转移数量也比较多,所以枚举起来会比较麻烦,所以可以用一个技巧就是可以预处理出所有的序列然后用序列枚举状态转移,这样会使代码简洁很多...

HDU 1002 (高精度加法运算)

A + B ProblemII Time Limit: 2000/1000 MS(Java/Others)    Memory Limit: 65536/32768 K (Java/Others) T...

hdu 1002大数相加

大数相加问题,

2017hdu新生赛 1002身份证验证

身份证验证 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Su...

2014多校联合第9场1002||hdu 4691 质因子

http://acm.hdu.edu.cn/showproblem.php?pid=4961

HDU 1002大数加法

A + B Problem II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Ot...
  • w_linux
  • w_linux
  • 2017年07月09日 20:38
  • 141

HDU-1002以及自己无力的吐槽..

第一次开始认真严肃的对待oj.第一个题目:正如描述,于是开始窃喜:"I have a very simple problem for you."(http://acm.hdu.edu.cn/showp...

hdu1002 高精度之A+B

A + B Problem II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hdu 1002
举报原因:
原因补充:

(最多只允许输入30个字)