lintcode 655 大整数加法

lintcode 655 大整数加法

以字符串的形式给出两个非负整数 num1 和 num2,返回 num1 和 num2 的和。

样例
样例 1:

输入 : num1 = “123”, num2 = “45”
输出 : “168”
注意事项
num1 和 num2 的长度都小于5100。
num1 和 num2 都只包含数字 0-9。
num1 和 num2 都不包含任何前导零。
您不能使用任何内置的BigInteger库内的方法或直接将输入转换为整数。

class Solution {
public:
    /**
     * @param num1: a non-negative integers
     * @param num2: a non-negative integers
     * @return: return sum of num1 and num2
     */
    string addStrings(string &num1, string &num2) {
        // write your code here
        string str;
        //if(num1.size()==0&&num2.size()==0)
        //    return str;
        stack<char> s;
        int i=num1.size()-1;
        int j=num2.size()-1;
        int flag = 0;//若需要进位,则flag为1
        //3个while,入栈
        while(i>=0 && j>=0){
            if((num1[i]+num2[j]+flag)>='j'){
                s.push(num1[i]+num2[j]+flag-58);
                flag=1;
            }
            else{
                s.push(num1[i]+num2[j]+flag-48);
                flag=0;
            }
            i--;j--;
        }
        while(i>=0){
            if((num1[i]+flag)>=':'){
                s.push(num1[i]+flag-10);
                flag=1;
            }
            else{
                s.push(num1[i]+flag);
                flag=0;
            }
            i--;
        }
        while(j>=0){
            if((num2[j]+flag)>=':'){
                s.push(num2[j]+flag-10);
                flag=1;
            }
            else{
                s.push(num2[j]+flag);
                flag=0;
            }
            j--;
        }
        if(flag==1){
            s.push('1');
        }
        //出栈
        while(!s.empty()){
            str += s.top();
            s.pop();
        }
        //返回结果
        return str;
    }
};

用到了栈,复杂度较高

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值