首文发表在 172. 阶乘后的零
题目描述
给定一个整数 n,返回 n! 结果尾数中零的数量。
示例 1:
输入: 3
输出: 0
解释: 3! = 6, 尾数中没有零。
示例 2:
输入: 5
输出: 1
解释: 5! = 120, 尾数中有 1 个零.
思路
这个问题可以用数学的方法简单分析;
10 = 2 * 5(质因数分解)
从最末尾开始连续地每出现一个0,即表示有一个 (2 * 5) 组出现。
而对于正整数 N,在[0, N]范围内,质因子中含有 2 的总是会比质因子含有 5 的要多。即如果质因子有 5 的数字总数为 a,那么质因子为2的总数 b >= a。因此,有x个质因子含有 5 的数,就有至少x个含有 2 的数。
于是,只要需要知道质因数含有 5 的数字有多少个,即可知道末尾连续出现 0 的个数有多少
解决方案
/**
* @param {number} n
* @return {number}
*/
var trailingZeroes = function (n) {
let count = 0;
// 因为可能出现一个数的质因子有多个5
while (n >= 5) {
n = Math.floor(n / 5);
count += n;
}
return count;
};