以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。
输入:"1","99"
返回值:"100"
说明:1+99=100
输入:"114514",""
返回值:"114514"
function solve(s,t){
let c = 0;let res = "";
s = s.split('')
t = t.split('')
while(s.length||t.length||c){
c += ~~s.pop()+~~t.pop()
res = c%10 + res;
c=c>9;
}
return res
}
说一下思路
1. 通过 split 将 a 和 b 转为数组;
2. while 循环进行判断,如果 a 数组或 b 数组不为空,或 c 值存在,则继续循环;
3. 通过 pop 方法去除数组的最后一项,并拿到最后一项的返回值,进行相加,传给 c 。
但此处要注意的一点是:因为 a 和 b 的长度不相同,所以 a 或 b 的数组元素可能为 undefined ,而数字加 undefined 的值为 NaN ,为了避免此情况,可以使用 ~~undefined 将 undefined 转换为 0 ;
4. 对 c 取余,拼接到 res 字符串的前面;
5. 之后对 c 进行判断,如果 c 大于 9 ,则 c 为 true, 进入下一轮循环。( c 在进行下一轮相加时,会从 true 转换为 1,因此就达到了进一的效果 )
总结:
拿出 a 数组和 b 数组的最后一项并与 c 相加赋给 c , 再对 c 取余拼接到 res 前面。
对 c 进行判断并赋予布尔值,之后循环