#include <algorithm>
#include <string>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 计算两个数之和
     * @param s string字符串 表示第一个整数
     * @param t string字符串 表示第二个整数
     * @return string字符串
     */
    string solve(string s, string t) {
        // write code here
        int m = s.size();
        int n = t.size();
        int ma = max(m,n);
        int mi = min(m,n);
        int flage = 0;
        string res;
        for(int i = 1;i<=ma;++i)
        {
            int num1,num2;
            if(i<= mi)
            {
                num1 = s[m-i] - '0';
                num2 = t[n-i] - '0';
            }
            else if(i > mi && m>n)
            {
                num1 = s[m-i] - '0';
                num2 = 0;
            }
            else {
                num1 = 0;
                num2 = t[n-i] - '0';
            }
            int sum = num1 + num2;
            if((sum + flage) >= 10)
            {
                res += (sum + flage - 10) + '0';
                flage = 1;
            }
            else
            {
                res += sum + flage + '0';
                flage = 0;
            }
        }
        if(flage)
            res += '1';
        reverse(res.begin(), res.end());
        return res;
    }
};

解题思路:模拟

上面是自己写的

以下是简洁的版本:

#include <algorithm>
#include <string>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 计算两个数之和
     * @param s string字符串 表示第一个整数
     * @param t string字符串 表示第二个整数
     * @return string字符串
     */
    string solve(string s, string t) {
        // write code here
        //若是其中一个为空,返回另一个
        if(s.empty())
            return t;
        if(t.empty())
            return s;
        //让s为较长的,t为较短的        
        if(s.size() < t.size())
            swap(s,t);
        int carry = 0;//进位标志
        //从后往前遍历较长的字符串
        for(int i = s.size()-1;i>=0;i--)
        {
            //转数字加上进位
            int temp = s[i] - '0' + carry;
            //获取较短的字符串相应的从后往前的下标
            int j = i - s.size() + t.size();
            //如果较短字符串还有
            if(j >= 0)
                temp += t[j] - '0';//将其进行加法
            carry = temp / 10;//取进位
            temp = temp % 10;//去十位
            s[i] = temp + '0';//修改结果
        }
        //最后如果还有进位
        if(carry)
            s = '1' + s;
        return s;
    }
};