欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

前端企业面试题:企业真实案例——39

程序员文章站 2022-06-04 14:49:55
...
大数计算如何实现?

通常的思路是考虑将数字转换为字符串,然后再每一位进行计算

我们以加法为例:

let add = function(num1, num2) {
  // 将短的数字长度补齐,左侧补0
  let len = Math.abs(num1.length-num2.length);
  let bu = "";
  for(let i=0; i<; i++){
    bu += "0";
  }
  // 将短的数字长度补齐,左侧补0
  if(num1.length>num2.length) {
    num2 = bu + num2;
  } else if(num1.length<num2.length){
    num1 = bu + num1;
  } 
  
  let bit = 0;  //相加后的进位,第一次计算时默认为0
  let result = ''; //保存累加的结果
  let temp = 0;  //临时计算结果
  for(let i=num1.length-1; i>=0;  i--){
    //计算该位相加结果,把之前的进位也计算进来
    temp = bit + Number(num1[i]) + Number(num2[i]);
    //将相加结果对10求余,累加到结果中
    result = (temp%10) + result; 
    //将相加结果除以10取整,得到进位数
    bit = parseInt(temp/10)
  }
  //当每一位都相加完毕, 判断bit是否进位
  //若有进位,则在整体结果前再加1
  return result = (bit === 1 ? '1' : '') + result;
}

 

在ES2020的新规范中,我们有了大数类型bigInt

//在整数字面量后面加n。
var bigIntNum = 9007199254740993n;

//使用 BigInt 函数。
var bigIntNum = BigInt(9007199254740);
var anOtherBigIntNum = BigInt('9007199254740993');

//通过 BigInt, 我们可以安全的进行大数整型计算
var bigNumRet = 9007199254740993n+ 9007199254740993n; //  18014398509481986n
bigNumRet.toString(); //  '18014398509481986'