如何解决确定阶乘函数的尾随零数 (javascript)
我正在编写一个函数,该函数返回阶乘的尾随零的数量。似乎零的数量从0增加了!每 5 个正增量,但每 25 个增量也增加 1 个零。问题是当我传入一个像 1000 这样的数字时,它应该返回 249,但它返回 240。我错过了什么吗?
我几乎肯定有更好的方法来写这个,但希望有人能告诉我我当前的函数中缺少什么?
function zeros(n) {
const extraZeros = n/25
const zeros = n/5
if(extraZeros >= 1) {
return zeros + Math.floor(extraZeros)
}else{
return Math.floor(zeros)
}
}
console.log(zeros(0),0);
console.log(zeros(5),1);
console.log(zeros(6),1);
console.log(zeros(30),7);
console.log(zeros(60),14);
console.log(zeros(1000),249); // missing 9 zeros?
任何帮助将不胜感激,谢谢!
解决方法
似乎零的数量是从0开始增加的!每 5 个正增量增加 1 个零,每 25 个增量增加 1 个零。
你说得对,但请再读一遍这句话。你看到图案了吗?
它还会每 125 和 625 增量增加一个零,等等。您需要根据 5 的幂进行概括。
const zeros = (n) => {
let power = 1;
let totalZeros = 0;
while (n > 5 ** power) {
totalZeros += Math.floor(n / (5 ** power));
power++;
}
return totalZeros;
};
console.log(zeros(0),0);
console.log(zeros(5),1);
console.log(zeros(6),1);
console.log(zeros(30),7);
console.log(zeros(60),14);
console.log(zeros(1000),249);
另一种写作方式,来自 Patrick Roberts:
const zeros = (n) => {
let totalZeros = 0;
for (let power = 5; power < n; power *= 5) {
totalZeros += Math.floor(n / power);
}
return totalZeros;
};
console.log(zeros(0),249);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。