lintcode 655. 大整数加法 高精度运算

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

样例
样例 1:

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

思路:将较短字符串前面用0补齐,再将两个字符串对应字符转为字符相加,如果小于10,则可直接添加进新字符串,如果大于等于10,则把个位数付给新字符串,十位数赋给temp进入下一轮的运算,需要的注意的是最前面的一位数也有可能要进位,可以单独考虑。

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
        int len1=num1.size();
        int len2=num2.size();
        string result;
        if(len1>len2)
        {
                num2.insert(num2.begin(),len1-len2,'0');
        }
        if(len1<len2)
        {
                num1.insert(num1.begin(),len2-len1,'0');
        }
        int temp=0;
        len1=num1.size();
        for (int i = len1-1; i >= 1; i--) {
            /* code */
            temp+=num1[i]-'0'+num2[i]-'0';
            if(temp<10) {result.insert(result.begin(),48+temp);temp=0;}
            else
            {
                result.insert(result.begin(),48+temp%10);
                temp=1;
            }
        }
        temp+=num1[0]-'0'+num2[0]-'0';
        if(temp<10) {result.insert(result.begin(),48+temp);temp=0;}
        else
        {
            result.insert(result.begin(),48+temp%10);
            result.insert(result.begin(),'1');
        }
        return result;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值