输入:输入的第一行包含整数T(1 <= T <= 20),表示测试用例的数量。然后是T行,每行包含两个正整数A和B.请注意,整数非常大,这意味着您不应该使用32位整数来处理它们。您可以假设每个整数的长度不超过1000。
输出:对于每个测试用例,您应输出两行。第一行是“Case#:”,#表示测试用例的编号。第二行是方程“A + B = Sum”,Sum表示A + B的结果。注意方程中有一些空格。在两个测试用例之间输出一个空行。
此处应注意 否则会出现格式错误 样例之间一个空行 而最后一个case只有一个空行。
由于整数非常大所以考虑用字符数组存放每位数字 再转换为整型数组
AC代码如图
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
struct highint{
int len;
int num[10001];
};
highint a,b,sum;
char c[10001],d[10001];
void type_conversion(char c[],char d[])
{
a.len = strlen(c);
b.len = strlen(d);
for(int i= 0; i<a.len; i++)a.num[a.len-1-i] = c[i]-'0'; //将char转换成int逆序存入数组num
for(int i= 0; i<b.len; i++)b.num[b.len-1-i] = d[i]-'0';
}
void add()
{
sum.len = max(a.len,b.len);
for(int i=0;i<sum.len;i++)
{
sum.num[i] += a.num[i] + b.num[i];
sum.num[i+1] += sum.num[i]/10;
sum.num[i] %= 10;
}
if(sum.num[sum.len]==0) sum.len--; //加到最后可能多出一位
}
int main()
{
int t,i,j;
cin >> t;
for(j=1; j<=t; j++)
{
memset(sum.num,0,sizeof(sum.num));
memset(a.num,0,sizeof(a.num)); //将数组清零 以便第二次计算
memset(b.num,0,sizeof(b.num));
cin >> c >> d;
type_conversion(c,d);
add();
cout << "Case " << j << ":" << endl;
cout << c << " + " << d << " = ";
for(int i=sum.len; i>=0 ;i--)
{
cout << sum.num[i];
}
if(j!=t)
cout << endl << endl;
else
cout << endl;
}
return 0;
}