Big Integer Addition存储在字符串内的整数相加

来源:互联网 发布:高斯滤波matlab算法 编辑:程序博客网 时间:2024/05/18 02:40

题目:

Given two non-negative integers num1 and num2represented as string, return the sum of num1 andnum2.

 注意事项
  • The length of both num1 and num2 is < 5100.
  • Both num1 and num2 contains only digits 0-9.
  • Both num1 and num2 does not contain any leading zero.
  • You must not use any built-in BigInteger library or convert the inputs to integer directly.

思路:

char array与string类型的转换,特殊边界的处理

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 fres;        if (len1 < len2) {            int tmp = len1;            len1 = len2;            len2 = tmp;            string tmpstr = num1;            num1 = num2;            num2 = tmpstr;        }        char res[len1+1];        int index2 = len2-1;        res[len1-1] = 0;        for (int i = len1-1; i > 0; i--) {            if (i > len1-len2-1) {                if ( res[i]+num1[i] + num2[index2] -'0'-'0' >=10) {                    res[i] += num1[i]+num2[index2]-'0'-10;                    res[i-1] = 1;                } else {                    res[i] += num1[i]+num2[index2]-'0';                    res[i-1] = 0;                 }                index2 -= 1;            } else {                if ( res[i]+num1[i] -'0' >=10) {                    res[i] += num1[i]-10;                    res[i-1] = 1;                } else {                    res[i] += num1[i];                    res[i-1] = 0;                }            }        }        if (len1 == len2) {            if ( res[0]+num1[0]+num2[0] -'0' -'0' >= 10) {                res[0] += num1[0]+num2[0]-'0'-10;                char res2[len1+2];                for (int i = 0; i < len1; i++) {                    res2[i+1] = res[i];                }                res2[0] = '1';                fres.assign(res2, len1+1);            } else {                res[0] += num1[0]+num2[0]-'0';                fres.assign(res, len1);            }        } else {        if ( res[0]+num1[0] -'0' >= 10) {            res[0] += num1[0]-10;            char res2[len1+2];            for (int i = 0; i < len1; i++) {                res2[i+1] = res[i];            }            res2[0] = '1';            fres.assign(res2, len1+1);        } else {            res[0] += num1[0];            fres.assign(res, len1);        }        }        return fres;    }};


原创粉丝点击