题目:
给定一个整数 n,返回 n! 结果尾数中零的数量。
示例 1:
输入: 3
输出: 0
解释: 3! = 6, 尾数中没有零。
示例 2:输入: 5
输出: 1
解释: 5! = 120, 尾数中有 1 个零.
说明: 你算法的时间复杂度应为 O(log n) 。
思路:
两个数相乘结果末尾有 0,一定是因为两个数中有因子 2 和 5,因为 10 = 2 x 5。
也就是说,问题转化为:
n!
最多可以分解出多少个因子 2 和 5这个主要取决于能分解出几个因子 5,因为每个偶数都能分解出因子 2,因子 2 肯定比因子 5 多得多。
现在,问题转化为:
n!
最多可以分解出多少个因子 5
代码实现:
/**
* @param {number} n
* @return {number}
*/
var trailingZeroes = function (n) {
let res = 0;
let divisor = 5;
while (divisor <= n) {
res += parseInt(n / divisor);
divisor *= 5;
}
return res;
};