#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;
    }
};
  1. 预处理:确保 s 是较长的字符串,这样处理起来更方便
  2. 逐位相加:从字符串末尾(数字的最低位)开始,逐位相加
  3. 进位处理:计算当前位的和时,要加上前一位的进位
  4. 结果构建:将当前位的结果添加到结果字符串中
  5. 最终处理:如果最后还有进位,需要额外添加一位
  6. 反转结果:因为我们是从低位到高位构建结果的,所以最后需要反转