算法题:大数加法

以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。

输入:"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 进行判断并赋予布尔值,之后循环

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值