字符串相加
字符串相加
问题描述
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。
注意:
num1 和num2 的长度都小于 5100.
num1 和num2 都只包含数字 0-9.
num1 和num2 都不包含任何前导零。
你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-strings
思路
和两数相加的思路一样
题解
class Solution {
public:
string addStrings(string num1, string num2) {
int len1=num1.length();
int len2=num2.length();
string ret="";
int array=0;
reverse(num1.begin(),num1.end());
reverse(num2.begin(),num2.end());
if(len1<len2){
for(int i=0;i<len1;i++){
ret+=to_string(((int)(num1[i]-'0')+(int)(num2[i]-'0')+array)%10);
array=((int)(num1[i]-'0')+(int)(num2[i]-'0')+array)/10;
}
for(int i=len1;i<len2;i++){
ret+=to_string(((int)(num2[i]-'0')+array)%10);
array=(array+(int)(num2[i])-'0')/10;
}
if(array==1){
ret+="1";
}
}else if(len1>len2){
for(int i=0;i<len2;i++){
ret+=to_string(((int)(num1[i]-'0')+(int)(num2[i]-'0')+array)%10);
array=((int)(num1[i]-'0')+(int)(num2[i]-'0')+array)/10;
}
for(int i=len2;i<len1;i++){
ret+=to_string(((int)(num1[i]-'0')+array)%10);
array=(array+(int)(num1[i])-'0')/10;
}
if(array==1){
ret+="1";
}
} else{
for(int i=0;i<len2;i++){
ret+=to_string(((int)(num1[i]-'0')+(int)(num2[i]-'0')+array)%10);
array=((num1[i]-'0')+(int)(num2[i]-'0')+array)/10;
}
if(array==1){
ret+="1";
}
}
reverse(ret.begin(),ret.end());
return ret;
}
};
看到一个很简单的实现。感觉自己还是很菜很菜的,向大佬学习...
class Solution {
public:
string addStrings(string num1, string num2) {
int m = num1.size(), n = num2.size();
int i = m - 1, j = n - 1, carry = 0;
string ret = "";
while (j >= 0 || i >= 0 || carry != 0) {
if (i >= 0) carry += num1[i--] - '0';
if (j >= 0) carry += num2[j--] - '0';
ret += carry % 10 + '0';
carry /= 10;
}
// 翻转字符串
reverse(ret.begin(), ret.end());
return ret;
}
};
作者:autuanliu
链接:https://leetcode-cn.com/problems/two-sum/solution/shu-shi-ji-suan-by-autuanliu/