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
首先要解决的就是存储多位整数的问题.显然,任何C/C++固有类型的变量都无法保存它.最直观的想法是可以用一个字符串来保存它.字符串本质上就是一个字符数组.然后依次从低位到高位进行运算,相加结果大于9即进位.
完整代码:
/******************************************
/* 杭电ACM1002:A + B Problem II
/* 2010/10/1
/* VC 6.0 by 52coder
/* persever2009@gmail.com
******************************************/
#include <iostream>
using namespace std;
string Sum_calc(string s1,string s2)
{
int length;
//比较s1,s2的长度
if (s1.length()>=s2.length())
{
length=s1.length();
string tmp(s1.length()-s2.length(),'0');
s2=tmp+s2;
}
else
{
length=s2.length();
string tmp(s2.length()-s1.length(),'0');
s1=tmp+s1;
}
string sum(length,'0');
//carry 进位标志位
int carry = 0;
for (int k=length-1;k!=-1;--k)
{
//字符'0'对应ASCII码为48
sum[k]=(s1[k]+s2[k]+carry-96)%10+48;
carry=(s1[k]+s2[k]+carry-96>9);
}
//最高位进位后,进位处理
if (carry)
sum='1'+sum;
return sum;
}
void main()
{
int T; //The number of test cases;
cin>>T;
//use the dynamic array when not knowing the dimension before compiling;
string *A = new string[T];
string *B = new string[T];
string *Sum = new string[T];
for (int i=0; i!=T; ++i)
{
cin>>A[i]>>B[i];
Sum[i] = Sum_calc(A[i], B[i]);
}
for (int j=0; j!=T; ++j)
{
cout<<"Case "<<j+1<<":"<<endl<<A[j]<<" + "<<B[j]<<" = "<<Sum[j];
if(i!=T-1)
cout<<endl;
}
文章出自:我爱程序员 http://www.52coder.net/archives/1055.html 版权所有.本站文章除注明出处外,皆为作者原创文章,可自由引用,但请注明来源.