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
  • 下载

hdu1002 - A + B Problem II

http://acm.hdu.edu.cn/showproblem.php?pid=1002 大数加法

hdu 4381 (多校第9场1002)

这题属于中档偏易题,也就是我感觉我现在已经在赛场上可以做的题.从水题到中档题。这是我dp水平的一个阶段性的改变 所以把做题的过程总结一下我觉得还是很有意义的 题意:n个格子,有一系列操作,...

斐波那契数列:BestCoder Round #29 1002 || hdu 5171

题目大意 以数集合multiset为背景,求解类似斐波那契数列前n项的和。解题思路 为了减少时间复杂度,肯定是矩阵快速幂。 先不着急解题,补充一下斐波那契的相关知识。F(n)=F(n-1) F(...

HDU 1002 A + B Problem II C++解法

#include #include //不能写成string,否则strlen未定义 using namespace std; string sum(string &s1,string...

HDU 4884 Bestcoder#2-1002 TIANKENG’s rice shop【模拟一发】

HDU 4884 Bestcoder#3-1002 TIANKENG’s rice shop【模拟一发】http://acm.hdu.edu.cn/showproblem.php?pid=4884

hdu 1002 A + B Problem II

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

HDU 1002

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

Hdu 5451 Best Solver(快速幂取模+循环节) -2015 ACM-ICPC沈阳网赛1002

Hdu 5451 Best Solver(快速幂取模+循环节) -2015 ACM-ICPC沈阳网赛1002
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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