题意:两个大数相加,按要求输出
代码如下:(未通过,但自己觉得算法正确,自测数据正常)
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int t;
cin >> t;
for (int m = 1; m <= t; m++)
{
char a[1000] = { 0 };
char b[1000] = { 0 };
cin >> a >> b;
char ta[1000] = { 0 }, tb[1000] = { 0 }, sum[1001] = { 0 };
int la = strlen(a);
int lb = strlen(b);
for (int i = la - 1, j = 999; i >= 0; i--, j--)
ta[j] = a[i] - '0'; //复制并对齐到最后并转换成数字,方便计算
for (int i = lb - 1, j = 999; i >= 0; i--, j--)
tb[j] = b[i] - '0'; //同上
int pos = 0;
int i = 999;
do
{
int tmp = ta[i] + tb[i] + pos;
pos = tmp / 10;
sum[i + 1] = tmp % 10 + '0';
i--;
} while (ta[i + 1] != 0 || tb[i + 1] != 0); //求和
bool head = true;
for (int i = 0, j = 0; i < 1001; i++)
{
if (sum[i] != 0)
{
if (sum[i] == '0' && head) //在一些情况下,会有第一个是'0'的,去掉
{
sum[i] = 0;
continue;
}
head = false;
sum[j] = sum[i];
sum[i] = 0;
j++;
}
}
cout << "Case " << m << ":\n"
<< a << " + " << b << " = " << sum << endl;
if (m != t)
cout << endl; //打印结果
}
return 0;
}