当前位置: 面试刷题>> 尾部的零 (经典算法题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
```
### 码小课网站分享
码小课网站中有更多关于算法和数据结构的内容分享,包括但不限于各种排序算法的实现、图论算法、动态规划等。在这里,你可以找到详尽的教程、实战项目以及面试技巧,帮助你在编程之路上不断进步。