杭电oj -1002 A + B Problem II(C++)
输入:输入的第一行包含整数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;
}

相关文章: