题目描述:给定一个整数 n,返回 n! 结果尾数中零的数量。
解题思路一:直接计算阶乘,然后计算0的个数,这个方法会超时,代码如下:
class Solution:
def trailingZeroes(self, n: int) -> int:
accm = 1
ans = 0
for i in range(2, n+1):
accm *= i
while(accm % 10 == 0):
ans += 1
accm //= 10
return ans
解题思路二:0实际是由2和5相乘得到,阶乘可以转化为每个数的因子相乘,而5的个数远远少于2的个数,因此计算1到n之间的数有多少个5的因子即可,代码如下:
class Solution:
def trailingZeroes(self, n: int) -> int:
ans = 0
for i in range(5, n+1):
while(i % 5 == 0):
ans += 1
i //= 5
return ans
解题思路三:一次计算只有一个因子5的数目即,n/5,再计算有两个因子5的数目,即n/25,有两个因子5的数在第一次就散有一个因子5的时候都已经加过了,所以后面每次加一次即可,n/25即可以不断5倍的增加除数,也可以每次讲被除数除以5,代码如下:
class Solution:
def trailingZeroes(self, n: int) -> int:
ans = 0
while(n):
n //= 5
ans += n
return ans
下面这个代码思路和上面一样,只是用递归进行了实现,代码如下:
class Solution:
def trailingZeroes(self, n: int) -> int:
return n//5 + self.trailingZeroes(n//5) if n > 0 else 0