尾部的零
29%
通过
设计一个算法,计算出n阶乘中尾部零的个数
样例
11! = 39916800,因此应该返回 2
挑战
O(logN)的时间复杂度
---------------------------------------------------------------------------------------------------------------------------------------------------------
解题思路:
尾部的0的个数即10的几次幂。10=2*5。所以0的个数等于求(2*5)的几次幂。因为在阶乘中出现一个5,最少出现两个2(2和4=2*2)。
所以我们只需要看阶乘中5出现的次数。注意有的是多个5出现:25=5*5 50=2*5*5
例如11! 共出现了11/5=2个5
100!共出现了100/5=20个5.但是这20个5是 5*1 5*2 5*3 ......5*20 ,这1-20中5出现了20/5=4 次5。所以100的阶乘共出现了24个5
------------------------------------------------------------------------------------------------------------------------------------------------------------------
实现(c++):
long long zero(long long num)
{
long long count=0;
long long tmp=num/5;
while(tmp>0)
{
count+=tmp;
tmp/=5;
}
return count;
}