设计一个算法,计算出n阶乘中尾部零的个数
样例
样例 1:
输入: 11
输出: 2
样例解释:
11! = 39916800, 结尾的0有2个。
样例 2:
输入: 5
输出: 1
样例解释:
5! = 120, 结尾的0有1个。
挑战
O(logN)的时间复杂度
我们都知道的阶乘算法就是递归的方法,但是在这个时间复杂度的限制下,大数字显然是会超出时间限制的,这里有一个经过数学严格证明的式子,n!里面5的数量等于n/5+n/5/5+.......那就是如果要计算几个阶乘中0的个数,那么就是找有多少个10这个因子,而10=2*5,所以换个思路来说就是找5的个数,因为2显然要比10多,而5却和10的数量一样
class Solution {
public:
/*
* @param n: A long integer
* @return: An integer, denote the number of trailing zeros in n!
*/
long long trailingZeros(long long n) {
// write your code here, try to do it without arithmetic operators.
long long count=0;
while(n>0){
count+=n/5;
n=n/5;
}
return count;
}
};