LintCode 655. 大整数加法

Posted zslhg903

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LintCode 655. 大整数加法相关的知识,希望对你有一定的参考价值。

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

 样例

给定 num1 = "123",num2 = "45" 
返回 "168"

 
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 longLen=max(num1.size(),num2.size());
        int shortLen=min(num1.size(),num2.size());
        string n1=num1.size()==longLen?num1:num2;//长度较长的串
        string n2=num2.size()==shortLen?num2:num1;//长度较短的串
        int diffLen=longLen-shortLen;
        int x=0;//进位
        for(int i=shortLen-1;i>=0;i--)//从两个串的末尾开始运算,运算shortLen位
        {
            n1[i+diffLen]=n1[i+diffLen]+n2[i]+x-0-0;
            x=n1[i+diffLen]/10;//保存进位
            n1[i+diffLen]=n1[i+diffLen]%10+0;
        }
        //剩余的部分与进位处理
        //如189+2,先处理9+2 然后在以下运算处理进位与前面18的加法运算
        for(int j=longLen-shortLen-1;j>=0;j--)
        {
            if(x==0)
                break;
            n1[j]=n1[j]+x-0;
            x=n1[j]/10;//保存进位
            n1[j]=n1[j]%10+0;
        }
        if(x>0)
            return 1+n1;
        else
            return n1;
        
    }
};

 

以上是关于LintCode 655. 大整数加法的主要内容,如果未能解决你的问题,请参考以下文章

用c语言实现超长整数的加法运算

大整数加法 HDU1002

HDU - 1002 A + B Problem II (大整数加法)

大整数加法和大整数乘法

LintCode 1. A + B 问题

1151: 大整数加法(正数)