题目:给定两个字符串形式的非负整数 num1
和num2
,计算它们的和。
注意:
num1
和num2
的长度都小于 5100.num1
和num2
都只包含数字0-9
.num1
和num2
都不包含任何前导零。- 你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式
分析:注意几个方面(1)循环中两个字符串都停止才停止(2)每次取字符串的数组变量定义在循环内部,并且初始化为0(3)进位值不是1就是0
string addStrings(string num1, string num2) {
int n1 = num1.size() - 1;//第一个字符串的下标控制(从后->前)
int n2 = num2.size() - 1;//第二个字符串的下标控制(从后->前)
string ret;//保存最终结果的字符串
if (n1 < 0 && n2 < 0)
return ret;
//保存两个数字和
int sum = 0;
//进位值初始化为0
int carray = 0;
while (n1 >= 0 || n2 >= 0)//两个字符串都结束才出来
{
//取两个字符串中的对应下标的数
int left = 0;
int right = 0;
if (n1 >= 0)
{
left = num1[n1--]-'0';
}
if (n2 >= 0)
{
right = num2[n2--]-'0';
}
sum = left + right + carray;//两个数值相加,再加上进位值
//将当前和的个位和进位位置好
if (sum >= 10)//需要进位
{
sum = sum % 10;
carray = 1;
}
else//不需要进位
{
carray = 0;
}
ret += (sum + '0');
}
//考虑最后一次的进位
if (carray>0)
{
ret += '1';
}
//最后反转字符串
reverse(ret.begin(), ret.end());
return ret;
}