在 javascript 中找到可能的 5000 的阶乘
Is finding the factorial of 5000 possible in javascript
我想求 5000 的阶乘,但一旦我尝试超过 100,它就会 return 无穷大。有没有办法绕过这个并得到结果?我正在努力争取解决这个问题所需的时间。
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
// (Whosebug 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)));
您会发现您的计算机可以 运行 瞬间完成那段代码。
这似乎给出了正确的结果(根据 https://coolconversion.com/math/factorial/What-is-the-factorial-of_5000_%3F)
const longFactorial = (num) => {
let result = num;
for (let i = 1n; i < num; i++) {
result = result * (num - i)
}
return String(result);
}
console.log(longFactorial(5000n));
170就能收!最大值:
function factorial (y){
if (y ==0 || y ==1){
return 1;
}
else {
f = y - 1;
while (f >= 1) {
y = y * f;
f--;
}
return y;
}
}
console.log(factorial(170));
我想求 5000 的阶乘,但一旦我尝试超过 100,它就会 return 无穷大。有没有办法绕过这个并得到结果?我正在努力争取解决这个问题所需的时间。
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
// (Whosebug 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)));
您会发现您的计算机可以 运行 瞬间完成那段代码。
这似乎给出了正确的结果(根据 https://coolconversion.com/math/factorial/What-is-the-factorial-of_5000_%3F)
const longFactorial = (num) => {
let result = num;
for (let i = 1n; i < num; i++) {
result = result * (num - i)
}
return String(result);
}
console.log(longFactorial(5000n));
170就能收!最大值:
function factorial (y){
if (y ==0 || y ==1){
return 1;
}
else {
f = y - 1;
while (f >= 1) {
y = y * f;
f--;
}
return y;
}
}
console.log(factorial(170));