大整数加法-LintCode

来源:互联网 发布:js 时间格式转换 编辑:程序博客网 时间:2024/05/21 10:31

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

注意事项:

  • num1 和 num2 的长度都小于5100。
  • num1 和 num2 都只包含数字 0-9。
  • num1 和 num2 都不包含任何前导零。
  • 您不能使用任何内置的BigInteger库内的方法或直接将输入转换为整数。

样例:
给定 num1 = “123”,num2 = “45”
返回 “168”

#ifndef C655_H#define C655_H#include<iostream>#include<string>using namespace std;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        if (num1.empty())            return num2;        if (num2.empty())            return num1;        string dic("0123456789");        string str;        int len1 = num1.size();        int len2 = num2.size();        //为了方便计算,在较短的字符串前面填充0        if (len1 > len2)        {            int cnt = len1 - len2;            for (int i = 0; i < cnt; ++i)                num2 = "0" + num2;        }        else        {            int cnt = len2 - len1;            for (int i = 0; i < cnt; ++i)                num1 = "0" + num1;        }        int i = num1.size() - 1;        bool flag = false;        //计算每一位相加的值,并判断进位情况        while (i >= 0)        {            int num = (num1[i] - '0') + (num2[i] - '0');            if (flag)            {                if (num + 1 >= 10)                {                    str = dic[num + 1 - 10] + str;                    flag = true;                }                else                {                    str = dic[num + 1] + str;                    flag = false;                }            }            else            {                if (num >= 10)                {                    str = dic[num - 10] + str;                    flag = true;                }                else                {                    str = dic[num] + str;                    flag = false;                }            }            --i;        }        if (flag)            str = "1" + str;        return str;    }};#endif
原创粉丝点击