题解 | #大数加法#

大数加法

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

题意:
        以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。
        

方法:
直接模拟


思路:
           两数相加顺序是从最低位到最高位,因此需逆向遍历字符串。
            首先,初始化 下标 i 指向字符串 s 的末尾,下标 j 指向字符串 t 的末尾和进位标志 flag = 0
            逆向循环相加操作如下:
int temp=s[i--]-'0'+t[j--]-'0'+flag;//求和

            因为两字符串长度可能不相等,所以还需遍历长的字符串。
           之后还需判断进位;
            最后反转结果字符串即可。

    


class Solution {
public:
    
    string solve(string s, string t) {
        string res="";
        int i=s.size()-1,j=t.size()-1;
        int flag=0;//进位
        while(i>=0&&j>=0){//逆序遍历
            int temp=s[i--]-'0'+t[j--]-'0'+flag;//求和
            if(temp>9){//进位
                flag=1;
                temp%=10;
            }else{
                flag=0;
            }
            res+=temp+'0';//追加结果
        }
        while(i>=0){//字符串s的长度长些
            int temp=s[i--]-'0'+flag;
            if(temp>9){
                flag=1;
                temp%=10;
            }else{
                flag=0;
            }
            res+=(temp)+'0';
        }
        while(j>=0){//字符串t的长度长些
            int temp=t[j--]-'0'+flag;
            if(temp>9){
                flag=1;
                temp%=10;
            }else{
                flag=0;
            }
            res+=(temp)+'0';
        }
        if(flag){//最后判断进位
            res+='1';
        }
        reverse(res.begin(),res.end());//反转字符串
        return res;
    }
};


时间复杂度:
空间复杂度:




全部评论

相关推荐

程序员花海:实习和校招简历正确格式应该是教育背景+实习+项目经历+个人评价 其中项目经历注意要体现业务 实习经历里面的业务更是要自圆其说 简历模板尽可能保持干净整洁 不要太花哨的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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