📜  其阶乘以n个零结尾的数字(1)

📅  最后修改于: 2023-12-03 15:36:47.306000             🧑  作者: Mango

计算阶乘以n个零结尾的数字

计算阶乘以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个零结尾的数字的实现方法,欢迎大家补充和改进。