Given two non-negative integers num1
and num2
represented as string, return the sum of num1
and num2
.
Note:
- The length of both
num1
andnum2
is < 5100. - Both
num1
andnum2
contains only digits0-9
. - Both
num1
andnum2
does not contain any leading zero. - You must not use any built-in BigInteger library or convert the inputs to integer directly.
结果发现存在大数相加的情况,于是只能使用讨论区各位大佬的想法,两个字符串bit相加。
下面是刚开始的代码:
class Solution {
public:
string addStrings(string num1, string num2) {
int a=StringToInt(num1);
int b=StringToInt(num2);
int sum=a+b;
string ret=IntToString(sum);
return ret;
}
private:
int StringToInt(const string& s)
{
int i=s.size(),ret=0,temp,tens=1;
while(i>0)
{
temp=s[i-1]-'0';
ret=ret+temp*tens;
tens=tens*10;
i--;
}
return ret;
}
string IntToString(int num)
{
if(num==0) return "0";
string ret;
while(num)
{
char c='0'+ num%10;
ret=c+ret;
num=num/10;
}
return ret;
}
};
大佬们的代码:
class Solution {
public:
string addStrings(string num1, string num2) {
int i = num1.size() - 1;
int j = num2.size() - 1;
int carry = 0;
string res = "";
while(i>=0 || j>=0 || carry){
long sum = 0;
if(i >= 0){sum += (num1[i] - '0');i--;}
if(j >= 0){sum += (num2[j] - '0');j--;}
sum += carry;
carry = sum / 10;
sum = sum % 10;
res = res + to_string(sum);
}
reverse(res.begin(), res.end());
return res;
}
};
自己的代码在编译过程中存在好多问题:
while循环判断条件的逻辑不够明确,导致开始存在很多问题。