javascript - 如何从 javascript 中的 BigInt 获取数字?
问题描述
我正在处理项目 Euler Problem 104的问题 n°104,并希望用 javascript 来完成。
为了解决这个问题,我需要计算斐波那契数列的大值,但是这个数列产生的数字太大而无法由经典 Number 处理,所以我使用了最新版本的 javascript 支持的 BigInt。
一旦我将特定结果存储在 BigInt 中,我需要检查它的第一个和最后一个数字是 10。
要从 Number 中获取数字,我们通常会在下面的代码中执行类似的操作,但是当数字变得非常大时,就会出错:
let number = BigInt(123456789)
console.log(number.toString())
console.log(number.toString()[3]) // Result is fine
let bigNumber = BigInt(1234567891111111111111111111111111111)
console.log(bigNumber.toString())
console.log(bigNumber.toString()[30]) // unpredictable result
似乎“toString()”方法只使用数字类型的精度(我相信是 2^53),因此我们很快就会失去 BigInt 数字的最后一位数字的精度。问题是我找不到其他方法来提取这些数字。
编辑: 我需要完美的精度,因为我所做的基本上是:
计算斐波那契 (500) = 280571172992510140037611932413038677189525
获取此数字的最后 10 位数字:8677189525(这是丢失精度的地方)
然后为了解决我的问题,我需要检查最后 10 个数字是否包含从 1 到 9 的所有数字
解决方案
对于大数字,我认为您应该添加n
后缀:
let number = BigInt(123456789)
console.log(number.toString())
console.log(number.toString()[3]) // Result is fine
let bigNumber = 1234567891111111111111111111111111111n // <-- n suffix, literal syntax
console.log(bigNumber.toString())
console.log(bigNumber.toString()[30]) // result
let bigNumber2 = BigInt('1234567891111111111111111111111111111') // <-- also works as a string, in case you can't use the literal for some reason
console.log(bigNumber2.toString())
console.log(bigNumber2.toString()[30]) // result
推荐阅读
- java - Android 11 的文件共享失败
- python - 为什么以以下方式在python中交换两个数字会在python编程中产生语法错误
- c - 分段错误在 for 循环中打印 c 样式的字符串
- c# - 利用 mingw32 的批处理文件将在资源管理器中手动启动,但在使用 Process.Start() C# 时立即关闭
- python - 如何在完成后重新启动 .py 文件
- java - 爱讯。Spring MVC 返回 415 响应
- javascript - 如何将 cURL 请求转换为 axios
- jquery - JQuery Datatable水平响应不起作用
- regex - 正则表达式 Python:拆分 CamelCase 并在有空间时停止
- java - 词搜索 II java.lang.ArrayIndexOutOfBoundsException