2. 尾部的零

题目

设计一个算法,计算出n阶乘中尾部零的个数

样例

11! = 39916800,因此应该返回 2

 

题解

一开始就用最简单对1-n找出5的个数,然后超时了。
虽然都直到是要找5,因为2肯定比5多,所以5的个数就是0的个数,只是计算方法得简单明了。
既然1-n里5的个数就是0,我们就看看规律。
5 10 15 。。。n 那n/5不就是n内有5因子的数量吗?没错 count += n/ 5
但里面有25,50这种有2个5因子的, count += n/25 ,如此类推 count += n / 5**x 直到5**x > count
上面写法只是反着来,原理是一样的。

 

def trailingZeros(n):
    count = 0
    while n > 5:
        count += n / 5
        n = n / 5

    return count

 

posted on 2018-03-20 19:19  usp10  阅读(101)  评论(0编辑  收藏  举报

导航