415. Add Strings(python+cpp)(大數加法)
阿新 • • 發佈:2018-12-17
題目:
Given two non-negative integers
num1
andnum2
represented as string, return the sum ofnum1
andnum2
.Note: The length of both
num1
andnum2
is < 5100. Bothnum1
andnum2
contains only digits0-9
. Bothnum1
andnum2
does not contain any leading zero. You must not use any built-in BigInteger libraryor 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
。