题目
给定一个整数 n,返回 n! 结果尾数中零的数量。
示例 1:
输入: 3
输出: 0
解释: 3! = 6, 尾数中没有零。
示例 2:
输入: 5
输出: 1
解释: 5! = 120, 尾数中有 1 个零.
解题思路
我们寻找阶乘后结尾的零,肯定不能直接计算该阶乘,容易导致溢出。
但是我们知道,末尾的0
一定是一对 2
和5
贡献的,而2
在阶乘中作为因子的数量是远远多于5
的,这其实就要求我们取寻找5
的个数。因子5
会出现在
5
的整倍数中5
的幂次方倍数中
我们在计算时,只需要将给定的数值n
不断的进行除5
操作,如果商大于5
,则表明给定数值范围内存在5
的幂次方,因为幂次方可以分解成多个5
,所以不能将幂次方当作一个因子进行计算,这时候我们继续进行除法操作即可。例如:
25!
中,5
作为因子有几个?
25/5 = 5
这是不对的,因为25本身也可以分解成为两个5。因此找5的因子个数应该为:25/5 + 25/5/5 = 6
。同理,50!
中,25
和 50
都是5^2
的倍数,同样存在两个因子5,因此他的因子个数为50/5 + 50/5/5 = 7
/**
* @param {number} n
* @return {number}
*/
var trailingZeroes = function(n) {
let res=0;
while(n>=5){
var k = Math.floor(n/5);
res += k;
n = k;
}
return res;
};