问题:设计一个算法,计算出n阶乘中尾部零的个数
样例 1:
输入: 11
输出: 2
样例解释:
11! = 39916800, 结尾的0有2个。
挑战:O(logN)的时间复杂度
解题思路:
可以将每个数拆分成其素因子的乘积,可以发现,0是由2*5产生的,而5的数量一定小于2的数量,因此5的个数决定了结尾0的个数。
只要计算n的阶乘中,5这个素因子出现多少次即可。
Solution:
public long trailingZeros(long n) {
// write your code here, try to do it without arithmetic operators.
long result = 0;
while(n != 0){
result += n / 5;
n /= 5;
}
return result;
}