#include <algorithm>
#include <fstream>
class Solution {
public:
string solve(string s, string t) {
if (s.length()<t.length()) {
swap(s, t);
}
int len1=s.length();
int len2 = t.length();
int carry = 0;
string result;
for (int i =len1-1, j = len2-1 ; i>=0; i--,j--) {
int sum = s[i]-'0';
if(j>=0){
sum+=t[j]-'0';
}
int cur = (sum +carry)%10+'0';
result.push_back(cur);
carry =(sum +carry)/10;
}
if (carry>0) {
result.push_back(carry+'0');
}
reverse(result.begin(), result.end());
return result;
}
};
class Solution {
public:
string solve(string s, string t) {
// 确保s是较长的字符串,方便处理
if (s.length() < t.length()) {
swap(s, t);
}
int len1 = s.length();
int len2 = t.length();
string result;
int carry = 0; // 进位
// 从右往左逐位相加
for (int i = len1 - 1, j = len2 - 1; i >= 0; i--, j--) {
int sum = (s[i] - '0') + carry;
// 如果较短的字符串还有数字
if (j >= 0) {
sum += (t[j] - '0');
}
carry = sum / 10; // 计算进位
result.push_back((sum % 10) + '0'); // 当前位的数字
}
// 处理最后的进位
if (carry > 0) {
result.push_back(carry + '0');
}
// 反转结果字符串,因为我们是从低位到高位添加的
reverse(result.begin(), result.end());
return result;
}
};
- 预处理:确保 s 是较长的字符串,这样处理起来更方便
- 逐位相加:从字符串末尾(数字的最低位)开始,逐位相加
- 进位处理:计算当前位的和时,要加上前一位的进位
- 结果构建:将当前位的结果添加到结果字符串中
- 最终处理:如果最后还有进位,需要额外添加一位
- 反转结果:因为我们是从低位到高位构建结果的,所以最后需要反转