给定一个整数 n,返回 n! 结果尾数中零的数量。
示例 1:
输入: 3
输出: 0
解释: 3! = 6, 尾数中没有零。
示例 2:
输入: 5
输出: 1
解释: 5! = 120, 尾数中有 1 个零.
说明: 你算法的时间复杂度应为 O(log n) 。
C
在1-9之间,只有2*5=10的尾数为0。所以,第一个方向就是处理2和5的倍数。2和5一起决定了尾数0的数量,很明显一个地方,5的数量明显少于2,那么,关键就在处理5的倍数了。
5! 有一个5, 尾数0的数量为1, 10! 有两个5的倍数, 尾数0的数量为2, ... , 25!有5个5的倍数,尾数0的数量却为6
25!的0尾数有6个,这是因为25 = 5 * 5,所以,25是包含2个5的,那么加上前面4个5的倍数,总共就有6个5的倍数了。
代码是不断地对5做除法, 然后将商累加起来,作为最后的结果。
int trailingZeroes(int n){
int cnt = 0;
while(n != 0) {
cnt = cnt + n / 5;
n = n / 5;
}
return cnt;
}