美文网首页
Js 超大整数相加的解决方案

Js 超大整数相加的解决方案

作者: pansly | 来源:发表于2019-11-04 18:43 被阅读0次

背景
Js 和任何一门语言一样,对其数值的范围有限制。

Number.MAX_VALUE // 1.7976931348623157e+308
Number.MAX_SAFE_INTEGER // 9007199254740991
Number.MIN_VALUE // 5e-324
Number.MIN_SAFE_INTEGER // -9007199254740991

如果我们想要对一个超大的整数(> Number.MAX_SAFE_INTEGER)进行加法运算,但是又想输出一般形式,那么使用 + 是无法达到的,一旦数字超过 Number.MAX_SAFE_INTEGER 数字会被立即转换为科学计数法,并且数字精度相比以前将会有误差。在此时就需要自己实现一套加法算法。

代码实现

function sumBigNumber(a, b) {
  var res = '',
    temp = 0;
  a = a.split('');
  b = b.split('');
  while (a.length || b.length || temp) {
    temp += ~~a.pop() + ~~b.pop();
    res = (temp % 10) + res;
    temp = temp > 9;
  }
  return res.replace(/^0+/, '');
}

解释

  • 首先我们用字符串的形势来保存大数,就保证了其在数学表示上不会发生变化
    初始化res, temp变量来保存中间计算的结果,在将两个字符串split为数组,以便我们进行每一位的运算
  • 循环的第一次就是进行 "个位" 的运算,将二者最末尾的两个数相加,由于每一位数字是0 - 9,所以需要进行进位,在进过取余数操作后,将结果保留在个位。
  • 判断 temp 是否大于 10,若是则将 temp 赋值为 true,等等,为什么要赋值成布尔值,不要着急,魔法即将发生。
  • 在两个大数中的一个还有数字没有参与运算,或者前一次运算发生进位后,进行下一次循环。
  • 接着除了对新的两个数字相加还要加上 temp,若上次发生了进位,则此时 temp 为 true,Js因为存在隐式转换,所以 true 转换为 1,我们借用 Js 的类型转换,完成了逻辑上的逢10进1操作。
    接下来就是重复上述的操作,直到计算结束。

例子:

sumBigNumber('100000000000002222', '111111'); // 100000000000113333
sumBigNumber('3782647863278468012934670', '23784678091370408971329048718239749083'); /

相关文章

  • Js 超大整数相加

    Js 超大整数相加的解决方案 如果我们想要对一个超大的整数(> Number.MAX_SAFE_INTEGER)进...

  • Js 超大整数相加的解决方案

    背景 Js 和任何一门语言一样,对其数值的范围有限制。 如果我们想要对一个超大的整数(> Number.MAX_S...

  • Js 超大整数相加的解决方案

    背景Js 和任何一门语言一样,对其数值的范围有限制。 如果我们想要对一个超大的整数(> Number.MAX_SA...

  • [leecode题目]超大整数相加Python实现

    超过一定长度的整数相加会溢出,那怎么实现超大整数数相加呢? 可能有人说,直接相加不行么,可能真不行,超过了类型长度...

  • js入门之路------number类型

    number类型 一、js 中两个number类型的数相加(相减): 1、两个整数,例如: 2、一个整数和一个小数...

  • Python 入门演示

    简单的数学运算 整数相加,得到整数: 浮点数相加,得到浮点数: 整数和浮点数相加,得到浮点数: 变量赋值 Pyth...

  • 算法题:超大字符串整数相加

    题目 实现两个超大字符串整数加法,字符串整数会超过 long 存储上限,不允许使用相关系统库函数直接完成。注意:整...

  • 大整数相加

    大整数相加

  • 2019-06-29

    整数相加输出整数运算结果。字符和整数相加会输出字符ASCII码和整数的运算结果。而字符串再加其他类型都为字符串。 ...

  • 大数相加 和 大数相乘

    1. 大数相加 1.1 整数的相加 1.2 浮点数相加 将整数部分 和 小数部分 提取出来分别计算,如果新的小数的...

网友评论

      本文标题:Js 超大整数相加的解决方案

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