例如,我想找到一个大数的所有整数的总和
电源(99,95)
我应用 bigInt 来获取大数的幂,并通过以下代码将其相加。
BigInt(Math.pow(99,95)).toString().split('').reduce(function(a,b){return a*1+b*1})
Run Code Online (Sandbox Code Playgroud)
但是,它返回 845。但正确答案应该是 972。
我检查了javascript中大数的整数输出是
3848960788934848488282452569509484590776195611314554049114673132510910096787679715604422673797115451807631980373077374162416714994207463122539142978709403811688831410945323915071533162168320
Run Code Online (Sandbox Code Playgroud)
这与正确答案不同(在 C# 中)
3848960788934848611927795802824596789608451156087366034658627953530148126008534258032267383768627487094610968554286692697374726725853195657679460590239636893953692985541958490801973870359499
Run Code Online (Sandbox Code Playgroud)
我想知道我的代码有什么问题导致了差异?
表达式Math.pow(99, 95)在解析时已经失去了精度 - 事后将其转换为 BigInt 并没有恢复丢失的精度。
从一开始就使用 BigInts,并使用**而不是Math.pow这样使幂运算有效:
console.log(
(99n ** 95n)
.toString()
.split('')
.reduce((a, b) => a + Number(b), 0)
);Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
484 次 |
| 最近记录: |