在javascript中找到可能的5000阶乘

我想找到 5000 的阶乘,但是一旦我尝试通过 100,它将返回无穷大。有没有办法绕过这个并得到结果?我正在努力争取解决这个问题所需的时间。

function testSpeed(n) {
    if (n > 0 && n <= 1) {
         return 1;
    } else {
         return n * testSpeed(n-1);
    }
}
console.log(testSpeed(5000));

回答

正如您所注意到的,Javascript 数字在变成“无穷大”之前只能变得如此之大。如果您想支持更大的数字,则必须使用BigInt。

例子:

// Without BigInt
console.log(100 ** 1000) // Infinity

// With BigInt
// (stackOverflow doesn't seem to print the result,
// unless I turn it into a string first)
console.log(String(100n ** 1000n)) // A really big number

因此,对于您的特定代码位,您需要做的就是将数字文字转换为 BigInt 文字,如下所示:

function testSpeed(n) {
  if (n > 0n && n <= 1n) {
      return 1n;
  } else {
      return n * testSpeed(n-1n);
  }
}

console.log(String(testSpeed(5000n)));

您会发现您的计算机可以快速运行那段代码。


以上是在javascript中找到可能的5000阶乘的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>