gpt4 book ai didi

javascript - 带尾随零的阶乘,但不计算阶乘

转载 作者:行者123 更新时间:2023-11-29 19:00:10 25 4
gpt4 key购买 nike

我正在计算阶乘的尾随零。我的解决方案是计算阶乘,然后确定它有多少尾随零。正如您所想象的那样,这不是很可扩展。如何在不计算阶乘的情况下解决这个问题?

我在 SO 上找到了这些页面: Trailing zeroes in a Factorial Calculating the factorial without trailing zeros efficiently?

但是,两者都不是在 Javascript 中。如果您对这个问题投反对票,请告诉我原因。感谢您的宝贵时间和反馈。

我的解决方案:

function zeros(n) {
var result = [];
var count = 0;

for (var i = 1; i <= n; i++) {
result.push(i);
} //generating range for factorial function

var factorial = result.reduce(function(acc, el) {
return acc * el;
}, 1); //calculating factorial

factorial = factorial.toString().split('');

for (var j = factorial.length - 1; j > 0; j--) {
if (parseInt(factorial[j]) === 0) {
count += 1;
} else {
break;
}
} //counting trailing zeros

return count;
}

最佳答案

知道一个数字中尾随零的数量归结为知道它可以被 10 除多少次,即被 5 和 2。

使用很容易计算的阶乘数:

f! = 1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16. ... .f
^ ^ ^

标记了最终产品中因子 5 的位置。很明显,因子 2 出现的频率更高,因此因子 5 的数量决定了尾随零的数量。

现在,当因子25出现时,应该算作2;同样,125 应该算作 5 的 3 个因数,等等。

你可以用这样的循环覆盖它:

function zeros(n) {
var result = 0;
while (n = Math.floor(n / 5)) result += n;
return result;
}

关于javascript - 带尾随零的阶乘,但不计算阶乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47370424/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com