当前位置: 面试刷题>> 尾部的零 (经典算法题500道)


题目描述补充: **题目:尾部的零** 给定一个整数 `n`,代表一个正整数 `n!`(`n` 的阶乘),请计算 `n!` 结果末尾有多少个零。 **阶乘** 是所有小于及等于该数的正整数的积,`n! = n × (n-1) × ... × 2 × 1`。 **注意**:结果是一个整数,表示 `n!` 结果末尾零的个数。 ### 解题思路 要计算 `n!` 末尾零的个数,我们需要知道零是如何在阶乘中产生的。在整数乘法中,末尾的零是由因子 `2` 和 `5` 相乘得到的,而且 `2` 的因子通常比 `5` 的因子多,所以末尾零的个数主要由 `5` 的因子的个数决定。 因此,我们可以遍历从 `1` 到 `n` 的所有整数,计算其中 `5` 的因子的个数。由于 `25`、`125` 等数包含多个 `5` 的因子(即 `25 = 5^2`,`125 = 5^3`),我们需要考虑这些数的贡献。 ### 示例代码 #### PHP ```php function trailingZeroes($n) { $count = 0; while ($n > 0) { $n = intval($n / 5); $count += $n; } return $count; } // 示例 echo trailingZeroes(5); // 输出 1,因为 5! = 120 echo trailingZeroes(10); // 输出 2,因为 10! = 3628800 ``` #### Python ```python def trailingZeroes(n): count = 0 while n > 0: n //= 5 count += n return count # 示例 print(trailingZeroes(5)) # 输出 1 print(trailingZeroes(10)) # 输出 2 ``` #### JavaScript ```javascript function trailingZeroes(n) { let count = 0; while (n > 0) { n = Math.floor(n / 5); count += n; } return count; } // 示例 console.log(trailingZeroes(5)); // 输出 1 console.log(trailingZeroes(10)); // 输出 2 ``` ### 码小课网站分享 码小课网站中有更多关于算法和数据结构的内容分享,包括但不限于各种排序算法的实现、图论算法、动态规划等。在这里,你可以找到详尽的教程、实战项目以及面试技巧,帮助你在编程之路上不断进步。
推荐面试题