大整数A+B

输入两个整数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 = 99999999999999999999999

解题代码:#include<bits/stdc++.h>
using namespace std;

int main()
{
ios::sync_with_stdio(false); // 提升输入输出效率(适配1000位大数)
cin.tie(nullptr);

int T;
cin >> T;
cin.ignore(); // 替代getchar(),更直观的换行符吸收方式

for(int case_num = 1; case_num <= T; case_num++) // 变量名更语义化
{
string A, B;
cin>>A>>B;

reverse(A.begin(), A.end());
reverse(B.begin(), B.end());

int carry = 0; // 英文命名更通用,替代jinwei
int idx = 0; // 替代cur,index缩写更语义化
vector result; // 替代res,更清晰

while(idx < A.size() || idx < B.size() || carry)
{
int digitA = (idx < A.size()) ? (A[idx] - '0') : 0;
int digitB = (idx < B.size()) ? (B[idx] - '0') : 0;

int sum = digitA + digitB + carry;
result.push_back(sum % 10);
carry = sum / 10;

idx++;
}

reverse(A.begin(), A.end());
reverse(B.begin(), B.end());

cout << "Case " << case_num << ":" << endl;
cout << A << " + " << B << " = ";
for(int j = result.size() - 1; j >= 0; j--)
{
cout << result[j];
}

if(case_num != T)
{
cout << endl << endl;
}
else
{
cout << endl;
}
}
return 0;
}

posted @ 2026-03-13 23:21  暗神酱  阅读(12)  评论(0)    收藏  举报