您的位置:首页 > 其它

415. Add Strings 计算两个数字字符串的和

2017-07-06 18:15 225 查看
Given two non-negative integers num1 and num2 represented as string, return the sum of num1 and num2.

Note:

1. The length of both num1 and num2 is < 5100.

2. Both num1 and num2 contains only digits 0-9.

3. Both num1 and num2 does not contain any leading zero.

4. You must not use any built-in BigInteger library or convert the inputs to integer directly.

class Solution {
public:
string addStrings(string num1, string num2)
{
int len1 = num1.size();
int len2 = num2.size();
if (len1 <= 0 && num2.size() <= 0)
return "";
else if (len1 <= 0)
return num2;
else if (len2 <= 0)
return num1;
else
{
string result = ""; //记录结果,将从个位开始计算的结果依次添加到后边,因而最后需要将前后翻转
int c = 0;//每个位上的进位
int sum;
int minlen = min(len1, len2);
int i = len1 - 1;
int j = len2 - 1;
while (minlen > 0)
{
sum = c + (num1[i] - '0') + (num2[j] - '0');//本位上的和等于两个家数在本位上的数字与上一位的进位之和
c = sum / 10;//计算本位上的进位
result += sum % 10 + '0';//计算本位上除了进位之后的个位数,直接添加到结果的后面
i--;
j--;
minlen--;
}
// 当num1较长
while (i != -1)
{
sum = c + (num1[i] - '0');
c = sum / 10;
result += sum % 10 + '0';
i--;
}
// 当num2较长
while (j != -1)
{
sum = c + (num2[j] - '0');
c = sum / 10;
result += sum % 10 + '0';
j--;
}
// 处理最后的进位
if (i == -1 && j == -1 && c != 0)
result += c + '0';
reverse(result.begin(), result.end());
return result;
}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: