• 大数加法模拟『模板』-编程技巧-反转再反转

AC代码

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 计算两个数之和
     * @param s string字符串 表示第一个整数
     * @param t string字符串 表示第二个整数
     * @return string字符串
     */
    string solve(string s, string t) {
        // write code here
        reverse(s.begin(), s.end()); //核心,反转1
        reverse(t.begin(), t.end());

        int lenA=s.size();
        int lenB=t.size();
        int carry=0;
        int curPos=0;
        vector<int> temp( max(lenA,lenB)+1 ); //注意点1:防止进位,多1个

        int a=0,b=0;
        while( a<lenA && b<lenB )
        {
            int one=s[a]-'0';
            int two=t[b]-'0';
            temp[curPos]=(one+two+carry)%10; //注意点2:temp和carry顺序
            carry=(one+two+carry)/10;
            ++a;
            ++b;
            ++curPos;
        }


        while( a<lenA )
        {
            int one=s[a]-'0';
            temp[curPos]=(one+carry)%10;
            carry=(one+carry)/10;
            ++a;
            ++curPos;
        }

        while( b<lenB )
        {
            int two=t[b]-'0';
            temp[curPos]=(two+carry)%10;
            carry=(two+carry)/10;
            ++b;
            ++curPos;
        }

        if( 0!=carry )
        {
            temp[curPos++]=carry;
        }

        string ret;
        for(int i=curPos-1; i>=0; --i)//核心,反转2
        {
            char c=temp[i]+'0';
            ret+=c;
        }

        return ret;


    }
};