求n阶乘中尾部零的个数(JAVA)
描述
设计一个算法,计算出n阶乘中尾部零的个数
样例
11! = 39916800,因此应该返回 2
挑战
O(logN)的时间复杂度
所有可能造成尾部0的只有10的倍数,5的倍数,也就是求阶乘中拥有的5的个数。
例如 11 = 1,2,3,4,5,6,7,8,9,10,11。
因数中能分解出两个5,所以有两个0.
26 = 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26。
5,10,15,20能分解出4个5,25能分解出2个五,所以结果为6.
public class Main {
public static void main(String[] args) {
System.out.println(getZero(105));
}
public static long getZero(long n) {
long result = 0;
long k = 5;
while (k < n) {
result += n / k;
k *= 5;
}
return result;
}
}