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

大数加法

http://www.nowcoder.com/questionTerminal/11ae12e8c6fe48f883cad618c2e81475

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

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;


    }
};
全部评论

相关推荐

找个工作&nbsp;学历是要卡的&nbsp;要求是高的&nbsp;技能不足是真的&nbsp;实习经验是0的&nbsp;简历无处可写是事实的&nbsp;钱不好赚是真的&nbsp;想躺平又不敢躺&nbsp;也不甘心躺&nbsp;怕自己的灵感和才华被掩埋甚至从未被自己发现&nbsp;又质疑自己是否真正有才华
码农索隆:你现在啊,你心里都明白咋回事,但是你没办法改变现状,一想到未来,你又没有信心狠下心来在当下努力。 得走出这种状态,不能一直困在那里面,哪不行就去提升哪,你一动不动那指定改变不了未来,动起来,积少成多才能越来越好
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务