前言
最近有人问了我一道算法题,计算前30个阶乘积,我在想这道题也不难,就写了给他,结果他告诉我写对了也错了,后来才跟我说精确度丢失了,然后就了解了BigInt。
什么是BigInt
简单来说BigInt就是一个不包含小数的大整数,以n结尾,可以进行无限大的整数运算。
BigInt的语法也比较简单,就和普通的数字类型相差不大,唯一的区别就是BigInt只能和BigInt计算,不能和number类型进行运算,以及整数后面以n结尾,强调一下,不要用number类型进行大整数运算后再去转BigInt,因为在计算的途中你的精确度已经丢失了。
语法
// 首先的定义一个BigInt
let a = 1n;
let b = BigInt(2)
// 然后就可以进行大整数运算了
a+=b
console.info(a)
a-=b
console.info(a)
a*=b
console.info(a)
a/=b
console.info(a)
// 但我们的值计算完毕后,我们在把他传为String,这样结尾就不会有n了
最后再把之前那道题的答案放出来
function Factorial(){
let factorialArray = ['1'];
let number = BigInt(2n)
while(factorialArray.length<30){
let factorialNumber = BigInt(1n);
for(let i = BigInt(2n) ; i <= number ; i++){
factorialNumber*= i
}
factorialArray.push(factorialNumber.toString())
number++
}
console.info(factorialArray)
}