A + B Problem II
这题看似简单,但是切记不能用 long long 来做。因为题目已知整数非常大,long long 的范围是根本不够的。所以,可以采取数组的方法去完成这题。
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int A[1001], B[1001], Sum[1001];//用数组定义三个所需的变量
int main()
{
int T;//测试用例的数量
cin >> T;//输入这个数量
for (int i = 1; i <= T; i++)
{
for (int i = 0; i <= 1000; i++)
{
A[i] = 0;
B[i] = 0;
Sum[i] = 0;
}//将三个所需变量初始化
string a, b;
cin >> a >> b;
for (int i = a.length() - 1; i >= 0; i--)
{
A[a.length() - 1 - i] = a[i] - '0';
}//从最后一个字符开始,逐个向前遍历,取出每个字符并减去字符’0’的ASCII码,这样就得到了对应的数字形式,存入A数组
for (int j = b.length() - 1; j >= 0; j--)
{
B[b.length() - 1 - j] = b[j] - '0';
}//与上面一样
int l = max(a.length(), b.length());//计算两个字符串长度的最大值,这是为了确保在拼接反转后的字符串时不会丢失信息
//因为可能一个字符串比另一个短
for (int i = 0; i <= l; i++)
{
int num = A[i] + B[i];//将这俩个数的每个位置的数相加得到这个位置的数
if (num > 9)
{
num -= 10;
B[i + 1]++;
}//如果俩数相加要进一位,则在它前一位加一
Sum[i] = num;
}
int s=0;
for (int i = 1000; i >=0; i--)
{
if (Sum[i])
{
s = i;
break;
}
}//这里得出Sum字符串的长度,以便后续输出这个和值
cout << "Case " << i << ":" << endl;
cout << a << " + " << b << " = ";
for (int i = s; i >= 0; i--)
cout << Sum[i];
if (i == T)
cout << endl;
}
return 0;
}
当然只是一种方法,如果你们还有更好的方法,请在评论区留下宝贵的方法和意见!!!