BitTigerio 2018-03-18
I have a very simple problem for you. Given two integers A and B, your job is to calculate the Sum of A + B.
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. <br />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.
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 <br />the result of A + B. Note there are some spaces int the equation. Output a blank line between two test cases.
2 1 2 112233445566778899 998877665544332211
Case 1: 1 + 2 = 3 Case 2: 112233445566778899 + 998877665544332211 = 1111111111111111110
此题是有一定难度的,其难点在于,如何表示当有1000位数的数字,因为就算是long long 型也是无法表达这么大的数字的(long long 是能表示出最大的数字的数据类型,其范围为9223372036854775807 ~ -9223372036854775808),因此应考虑采用数组进行存储,把我们输入的数转换成字符串,再将其转换为整数,另外,在本题中要注意相加的几种情况,
第一种,A.length==B.length
第二种,A.length>B.length
第三种,A.length<B.length
对于每种情况应该如何考虑,最后要注意题中所给的输入、输出格式。
#include<iostream>
#include<string>
#include<cstdio>
using namespace std;
string a,b;
int sum[1005],q;//q为相加之后的位数
void add2(string a,string b) {
/*两个大数相加求和*/
int m,n,t=0,i=0,int_a,int_b;
//t为进位数
m=a.length()-1;
n=b.length()-1;
while(m>=0&&n>=0){
int_a=a[m]-'0';//将输入的每一位数先转换成int型
int_b=b[n]-'0';
sum[i]=(int_a+int_b+t)%10;//相加后第i位的数字
t=(int_a+int_b+t)/10;//相加后向上一位进的位数
i++;
m--;
n--;
}
if(m>n){
while(m>=0){
int_a=a[m]-'0';
sum[i]=(int_a+t)%10;
t=(int_a+t)/10;
m--;
i++;
}
}
if(m<n){
while(n>=0){
int_b=b[n]-'0';
sum[i]=(int_b+t)%10;
t=(int_b+t)/10;
n--;
i++;
}
}
q=i-1;
if(t>=1)//最后一次相加存在进位时
{
sum[i]=t;
q=i;
}
}
void output() {
/*输出函数*/
int i=q;
cout<<a<<" + "<<b<<" = ";
for(;i>=0;i--){
cout<<sum[i];
}
cout<<endl;
}
int main() {
int n;//测试用例数
cin>>n;
int i=0;
for(; i<n; i++) {
cin>>a>>b;
add2(a,b);
printf("Case %d:\n",i+1);//测试样例格式
output();
if(i<n-1)
cout<<endl;
}
return 0;
}