超详细题解
2025-08-24 19:58:35
发布于:上海
4阅读
0回复
0点赞
#include<iostream>
#include<string>
using namespace std;
int main() {
string a, b;
cin >> a >> b;
// 反转两个字符串,便于从低位开始相加
string reversedA, reversedB;
for(int i = a.size() - 1; i >= 0; i--) {
reversedA += a[i];
}
for(int i = b.size() - 1; i >= 0; i--) {
reversedB += b[i];
}
// 确定最大长度
int maxLength = max(a.size(), b.size());
int result[102] = {0}; // 初始化结果为0,预留额外空间处理进位
int carry = 0; // 进位值
// 逐位相加
for(int i = 0; i < maxLength; i++) {
// 安全获取每一位数字,避免越界
int digitA = (i < reversedA.size()) ? (reversedA[i] - '0') : 0;
int digitB = (i < reversedB.size()) ? (reversedB[i] - '0') : 0;
// 计算当前位的和(包括进位)
int sum = digitA + digitB + carry;
result[i] = sum % 10; // 当前位的结果
carry = sum / 10; // 新的进位值
}
// 处理最后的进位
if (carry > 0) {
result[maxLength] = carry;
maxLength++;
}
// 输出结果(从最高位开始输出)
bool hasOutput = false; // 标记是否已经开始输出非零数字
for(int i = maxLength - 1; i >= 0; i--) {
if (result[i] != 0 || hasOutput) {
cout << result[i];
hasOutput = true;
}
}
// 如果所有位都是0,输出0
if (!hasOutput) {
cout << "0";
}
return 0;
}
这里空空如也
有帮助,赞一个