1. 程式人生 > >415. Add Strings(python+cpp)(大數加法)

415. Add Strings(python+cpp)(大數加法)

題目:

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

Note: 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.

解釋: 大數加法,需要用一個數組記錄進位情況。 python程式碼:

class Solution(object):
    def addStrings(self, num1, num2):
        """
        :type num1: str
        :type num2: str
        :rtype: str
        """
        max_len=max(len(num1),len(num2))
        num1=num1.zfill(max_len)
num2=num2.zfill(max_len) result=[0]*(max_len+1) flag=[0]*(max_len+1) for i in xrange(max_len-1,-1,-1): i_sum=int(num1[i])+int(num2[i])+flag[i+1] temp=i_sum-10 result[i+1]=i_sum%10 if temp>=0: flag[i]=1 else
: flag[i]=0 if flag[0]!=0: result[0]=1 if result[0]==0: result.pop(0) result_str=''.join([str(i) for i in result]) return result_str

c++程式碼:

class Solution {
public:
    string addStrings(string num1, string num2) {
        int max_len=max(num1.size(),num2.size());
        int dif=num1.size()>num2.size()?num1.size()-num2.size():num2.size()-num1.size();
        string tmpzero(dif,'0');
        if (num1.size()>num2.size())
            num2=tmpzero+num2;
        else
            num1=tmpzero+num1;
        vector<string> result(max_len+1,"0");
        vector<int> flag(max_len+1,0);
        for (int i=max_len-1;i>=0;i--)
        {
            int i_sum=num1[i]-'0'+num2[i]-'0'+flag[i+1];
            int tmp=i_sum-10;
            result[i+1]=to_string(i_sum%10);
            if (tmp>=0)
                flag[i]=1;
            else
                flag[i]=0;
        }
        if (flag[0]!=0)
            result[0]="1";
        //刪除開頭的0
        if (result[0]=="0")
            result.erase(result.begin());
        string finalresult;
        finalresult =accumulate(result.begin(),result.end(),finalresult);
        return finalresult;
    }
};

總結: 可以機智低用accumulate()函式把vector<string> 轉換成string