📅  最后修改于: 2023-12-03 15:36:47.306000             🧑  作者: Mango
计算阶乘以n个零结尾的数字,实际上就是求阶乘中因子5的个数。因为阶乘中每出现一个5,就会产生一个0,而因子2的个数显然是充足的。
因此,我们只需要先计算出阶乘中因子5的个数,然后在乘以一个适当的幂次10即可。具体实现如下:
def factorial_with_n_zeros(n: int) -> int:
"""
计算阶乘的末尾有n个0的数字。例如,当n=2时,返回的数字应该是100。
"""
count = 0
i = 5
while n >= i:
count += n // i
i *= 5
# 计算出因子5的个数后,乘以10的幂次即可
return 10**count
该函数的时间复杂度为$O(\log n)$,空间复杂度为$O(1)$。
测试代码如下:
assert factorial_with_n_zeros(2) == 100
assert factorial_with_n_zeros(3) == 1000
assert factorial_with_n_zeros(5) == 100000
以上是计算阶乘以n个零结尾的数字的实现方法,欢迎大家补充和改进。