输入两个整数A、B,求 A + B。
输入格式:
首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试输入2个正整数A、B。整数可能很大,但每个整数的位数不会超过1000。
输出格式:
对于每组测试输出两行数据;第一行输出"Case #:",#表示测试组号,第二行输出形式为“A + B = Sum”,Sum表示A+B的结果。每两组测试数据之间空一行。
输入样例:
2
1 2
88888888888888888888888 11111111111111111111111
输出样例:
Case 1:
1 + 2 = 3
Case 2:
88888888888888888888888 + 11111111111111111111111 = 9999999999999999999
思路:
数字位数极多,用字符串读入
利用vector容器
将两个字符串逆序相加,如果t>10,向前进1,如果t<10,则不管
得到的结果逆序输出
注意:
1.每两组测试数据之间空一行:ans表示次数,ans不等于0时会空一行,ans等于0时,不会空行
代码:
#include<iostream>
#include<vector>
using namespace std;
vector<int>add(vector<int>&A,vector<int>&B)
{
vector<int>C;
int i,t=0;
for(i=0;i<A.size()||i<B.size();i++)
{
if(i<A.size())
t+=A[i];
if(i<B.size())
t+=B[i];
C.push_back(t%10);
t=t/10;
}
if(t)
C.push_back(1);
return C;
}
int main()
{
int ans,k,i;
cin>>ans;
k=ans;
while(ans--)
{
printf("Case %d:\n",k-ans);
string a,b;
vector<int>A,B;
cin>>a>>b;
for(i=0;i<a.size();i++)
printf("%c",a[i]);
printf(" + ");
for(i=0;i<b.size();i++)
printf("%c",b[i]);
printf(" = ");
for(i=a.size()-1;i>=0;i--)
A.push_back(a[i]-'0');
for(i=b.size()-1;i>=0;i--)
B.push_back(b[i]-'0');
vector<int>C=add(A,B);
for(i=C.size()-1;i>=0;i--)
printf("%d",C[i]);
printf("\n");
if(ans!=0)
printf("\n");
}
return 0;
}