给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。
num1 和num2 的长度都小于 5100.
num1 和num2 都只包含数字 0-9.
num1 和num2 都不包含任何前导零。
你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。
// 一,暴力解法
var addStrings = function(num1, num2) {
// 不能使用BigInteger,那么就遍历吧
var tem=0;
if(num1.length<num2.length){
var a=num1;
num1=num2;
num2=a;
}
num1=num1.split('').reverse().map(Number);
num2=num2.split('').reverse().map(Number);
var str='',b=0;
for(var i=0;i<num1.length;i++){
if(i<num2.length){
b=num1[i]+tem+num2[i];
}else{
b=num1[i]+tem;
}
if(b>9){
str=(b-10)+str;
tem=1;
}else{
str=b+str;
tem=0;
}
}
//最近进一
if(tem==1){
return 1+str;
}else{
return str
}
};
解法二:通过取余+双指针
var addStrings = function(num1, num2) {
var l=num1.length-1;
var r=num2.length-1;
var carry=0;//是否进1
var str=''
while(true){
var a=l<0?0:num1[l]
var b=r<0?0:num2[r]
if(l<0&&r<0) break;
var tem=Number(a)+Number(b)+carry;
carry=tem>=10?1:0;
str=(tem%10)+str;
l--;
r--;
}
return carry>0?1+str:str
};