摘要:5.1.1 题目描述题目描述:给定一个正整数 n,求 n! 的末尾有多少个连续的 0。5.1.2 解题思路要计算 n! 末尾有多少个连续的 0,我们需要理解末尾的 0 是由什么产生的。在阶乘的计算中,末尾的 0 是由因子 10 产生的,而 10 可以分...
5.1.1 题目描述
题目描述:给定一个正整数 n,求 n! 的末尾有多少个连续的 0。
5.1.2 解题思路
要计算 n! 末尾有多少个连续的 0,我们需要理解末尾的 0 是由什么产生的。在阶乘的计算中,末尾的 0 是由因子 10 产生的,而 10 可以分解为 2 × 5。因此,每个末尾的 0 对应着一对 2 和 5 的因子。
在 n! 的质因数分解中,2 的因子数量通常比 5 的因子数量多(因为偶数比 5 的倍数更频繁)。因此,末尾的 0 的数量由 n! 中 5 的因子的数量决定。
具体来说,计算 n! 中 5 的因子的数量可以通过以下步骤:
1. 计算 n 除以 5 的商,得到有多少个数是 5 的倍数。
2. 计算 n 除以 25 的商,得到有多少个数是 25 的倍数(这些数在之前的步骤中已经计算过一次 5 的因子,但 25 有两个 5 的因子,所以需要额外计算一次)。
3. 计算 n 除以 125 的商,以此类推,直到商为 0。
4. 将所有商相加,得到的总和就是 n! 末尾的连续的 0 的数量。
5.1.3 代码实现
python
def trailing_zeroes(n):
count = 0
while n > 0:
n = n // 5
count += n
return count
5.1.4 代码解释
1. 初始化计数器 `count` 为 0。
2. 进入循环,条件是 `n` 大于 0。
3. 在每次循环中,将 `n` 除以 5 的商赋值给 `n`,这相当于计算当前层级的 5 的因子数量。
4. 将商加到 `count` 中。
5. 当 `n` 变为 0 时,循环结束,返回 `count` 作为结果。
例如,计算 25! 的末尾有多少个 0:
25 // 5 = 5,count = 5
5 // 5 = 1,count = 5 + 1 = 6
1 // 5 = 0,count = 6 + 0 = 6
结束循环,返回 6。
因此,25! 的末尾有 6 个连续的 0。