要求给定两个整数的字符串表示形式,返回这些整数之和的字符串表示形式。
例如:
sumStrings('1','2') // => '3'
思路看着非常简单,转成数字类型计算再转换回来就行,不过JS在小数点前的数字多于21位还有小数点后的零多于5个会变成科学计数法,这时候计算就会损失精度了,可以吧字符串转换成数组,一位一位的拆分计算
function sumStrings(a,b) {
var x1 =[];
var y1 =[];
//c是用来在相加超过10进1时使用
var c=0;
var nstr='';
var narr=[];
for (let j of a){
x1.push(j)
}
for (let j of b){
y1.push(j)
}
//反转补0
x1.reverse();
y1.reverse();
if(x1.length>y1.length){
for (let i = (y1.length);i<(x1.length);i++){
y1.push('0')
}
}
if(x1.length<y1.length){
for (let i = (x1.length);i<(y1.length);i++){
x1.push('0')
}
}
//再次反转进行计算
x1.reverse();
y1.reverse();
for(let i =(x1.length-1);i>-1;i-- ){
let zs =String(Number(x1[i])+Number(y1[i])+c)
if(zs.length>1){
narr.push(zs[1])
c=1
}else{
narr.push(zs)
c=0
}
}
//末尾进1
if(c==1){
narr.push('1')
}
//反转拼接移除头部的0,
return narr.reverse().join("").replace(/\b(0+)/gi,"");
}
只能计算正整数的加法,不过思路这样减法可以类推,
如果吧字符串分割成多位可以提高效率