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