Js 超大整数相加

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) {
    let 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,若上次发生了进位,则此时temptrueJs因为存在隐式转换,所-true转换为 1,我们借用Js的类型转换,完成了逻辑上的逢10进1操作。
  • 接下来就是重复上述的操作,直到计算结束。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 Js 和任何一门语言一样,对其数值的范围有限制。 如果我们想要对一个超大的整数(> Number.MAX_S...
    VoyagerOne阅读 14,027评论 5 9
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 9,700评论 0 13
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,192评论 18 399
  • 1 关键字 1.1 关键字的概述 Java的关键字对java的编译器有特殊的意义,他们用来表示一种数据类型,或...
    哈哈哎呦喂阅读 3,938评论 0 0
  • 今天,妈妈跟着我一起去上学了,妈妈说,是老师让他去的,我很纳闷为什么,老师让妈妈过来听课呢?我也不知道,但是,妈妈...
    段智耀阅读 864评论 0 0