我试图解决以下问题,即如何添加两个字符串而不将它们转换为整数。我找到了问题的解决方案,但我不明白。有人会用简单的英语解释一下吗?
这是代码:
class Solution {
public:
string addStrings(string num1, string num2) {
int i=num1.size()-1,j=num2.size()-1,carry=0;
string res="";
while(i>=0||j>=0)
{
if(i>=0) carry+=num1[i--]-'0';
if(j>=0) carry+=num2[j--]-'0';
res=to_string(carry%10)+res;
carry/=10;
}
return carry?"1"+res:res;
}
};
答案 0 :(得分:0)
好!勒梅向你解释。数字从0到9。因此,可能的最大总和<= 18。因此,我们需要取一个标志/计数/进位虚拟变量,当我们的总和超过10 时,它将为1(num1 [i] - '0'+ num2 [i] - '0'> = 10)< / strong>即可。 当我们添加两个数字时,我们从最后开始。同样,我们将从头到尾循环,即 while(i> = 0或j&gt; = 0或count)。如果i = 0&amp; / |,则计数在而语句中j = 0 sum大于10然后我们需要在字符串的开头添加一个额外的。 从两个字符串添加元素并减少相应的计数器i - ,j--。添加进位0或1.计算新进位,将传递给下一个总和计算。以我们想要的单个数字取模数。将其转换为字符串并附加到res。
我的代码
class Solution {
public:
string addStrings(string num1, string num2) {
int n1 = num1.size(), i = n1 - 1;
int n2 = num2.size(), j = n2 - 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 = to_string(sum) + res;
}
return res;
}
};