通过 BigInt 实现大整数高精度计算,及模拟 long long 等类型的数值计算

BigInt 可以表示任意大的整数,可用于实现高精度计算,也可转换为任意位的有符号及无符号数。

基础使用

初始化 BigInt 对象:

// 字面量
let n = 1n

// 将整数转换为 BigInt,前提是需要满足整数范围的数,不然未传入时已丢失精度
let n = BigInt(1)

// 将字符串读取为转换为 BigInt
let n = BigInt("11111111111111111111111")

数学运算:

// 支持 +、*、-、**、%,需要 BigInt 之间相互运算
let b = BigInt(a) * 2n

转为 64 位数,传入:

// 将 BigInt 转换为 64 位整数
let a = BigInt.asIntN(64, -1n)

// 将 BigInt 转换为 64 位无符号整数
let b = BigInt.asUintN(64, -1n)

模拟 int 或 long long 类型

有时看到其他语言的题解,会利用 int 或 long long 类型进行计算。JS 的 number 类型行为与这些类型有各种不同。

而通过 BigInt 的转换方法,可模拟作为 64 位有符号整数进行计算,可达到类似于 long long 的效果,数值超出时是取模的效果。

数值读取时转换一次,计算后再次转换即可:

let a = BigInt.asIntN(64, "...")
let b = BigInt.asIntN(64, "...")
let c = BigInt.asIntN(64, a * b)
本文收录于专栏
记录 JavaScript 刷题时用到的一些语法、代码片段、工具、经验等