美文网首页
大数相加代码分析

大数相加代码分析

作者: AAA前端 | 来源:发表于2019-06-21 18:27 被阅读0次
  • 今天看到一段代码,实现两个比较大的数相加。当然有其他简单的方法解决,这里仅仅分析一下;
function sumString (a,b){
  var res = '', c=0;
  a = a.split('');
  b = b.split('');
  while(a.length || b.length || c){
    console.log(c)
    c += ~~a.pop() + ~~b.pop()
    console.log(c)
    res= c % 10 +res;    
    c = c > 9;
    console.log('一次循环结束',c, res)
  }
  return res.replace(/^0+/, '')
}

console.log(sumString('23', '119'))

  • 控制台结果
0
12
一次循环结束 true 2
true
4
一次循环结束 false 42
false
1
一次循环结束 false 142
142
  • 分析一下

a = a.split(''); b = b.split('');

  • 这里把两个数变成了两个数组 a= [2,3] b=[1,1,9]

while(a.length || b.length || c){

  • 循环的条件 a数组 或者 b数组仍然有值,并且变量c(是一个判断有没有进1的变量)为true时继续进入里面了

c += ~~a.pop() + ~~b.pop()

  • 这里 a.pop() 获取数组最后一项,并且原数组减少最后一项。
  • ~~是取整 类似还有方法还有
    *** 8.9|0
    *** 8.9>>0
    *** 8.9<<0
  • c+= 等于 c = c+ ... 在这里 c为true为转换为1 false转换为0

res= c % 10 +res;

  • res 保存着每一次循环之后的记录的值。从个位往高位保存;

c = c > 9;

  • 每次循环后记录本次计算是否进一位。 其实我觉得写成这个样更有语义化 c = c > 9 ? 1 : 0;

return res.replace(/^0+/, '')

  • 循环之后返回 去掉以0开始的多个连续0字符串;
  • 第一次循环 3 + 9 = 12
    res 为个位数 2 c由于大于9 为true

  • 第二吃循环 2 + 1 = 3
    c = true + 2 + 1 相当于 1+2+1 = 4;
    res 等于 4 + 上一次循环保存的个位数 2 = 42
    c < 9 为 false

*第三次循环
[].pop() 为undefined ~~[].pop()为0
c = false + 0 + 1 = 1
res = 1+ 上次循环保存的两位数42 = 142
c<9 为false

  • 此时 a.length ==0 b.length==0 c = false 跳出循环 返回 142

相关文章

  • 大数相加代码分析

    今天看到一段代码,实现两个比较大的数相加。当然有其他简单的方法解决,这里仅仅分析一下; 控制台结果 分析一下 a ...

  • 前端-大数相加

    大数相加

  • 大数相加

    大数相加类

  • JSCoding

    大数相加 深拷贝

  • 大数相加

    大数相加(java) 一、BigDecimal工具类 二、转换为字符串解法

  • RxSwift官方实例一(绑定)

    代码下载 数字相加 搭建UI 构建如下UI: 绑定UI 代码分析: 首先使用combineLatest操作符组合3...

  • 大数相加与相乘问题代码实现

    题目是这样的:输入两个整数,要求输出这两个数的乘积或加和。输入的数字可能超过计算机内整形数据的存储范围。 加和问题...

  • 大数相加最清晰的代码——Java

    看到网上写大数相加的代码,写的都不是很清楚,好几个循环弄得人晕头转向,自己写了个只有一个循环的代码,请大家指教。

  • JS大数字相加

    问:如何计算大数字的相加?大到可以溢出的那种。 大数字相加,避免使用传统的相加(可能会溢出),所以使用数学题的思路...

  • P98-任意两个整数的加法

    两个大数(包括负数)相加

网友评论

      本文标题:大数相加代码分析

      本文链接:https://www.haomeiwen.com/subject/qrpuqctx.html