阶乘尾部的0

来源:互联网 发布:sign在c语言中的意思 编辑:程序博客网 时间:2024/05/01 21:49

尾部的零

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;}

0 0
原创粉丝点击