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


题目描述补充:

题目:尾部的零

给定一个整数 n,代表一个正整数 n!n 的阶乘),请计算 n! 结果末尾有多少个零。

阶乘 是所有小于及等于该数的正整数的积,n! = n × (n-1) × ... × 2 × 1

注意:结果是一个整数,表示 n! 结果末尾零的个数。

解题思路

要计算 n! 末尾零的个数,我们需要知道零是如何在阶乘中产生的。在整数乘法中,末尾的零是由因子 25 相乘得到的,而且 2 的因子通常比 5 的因子多,所以末尾零的个数主要由 5 的因子的个数决定。

因此,我们可以遍历从 1n 的所有整数,计算其中 5 的因子的个数。由于 25125 等数包含多个 5 的因子(即 25 = 5^2125 = 5^3),我们需要考虑这些数的贡献。

示例代码

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

def trailingZeroes(n):
    count = 0
    while n > 0:
        n //= 5
        count += n
    return count

# 示例
print(trailingZeroes(5))  # 输出 1
print(trailingZeroes(10)) # 输出 2

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

码小课网站分享

码小课网站中有更多关于算法和数据结构的内容分享,包括但不限于各种排序算法的实现、图论算法、动态规划等。在这里,你可以找到详尽的教程、实战项目以及面试技巧,帮助你在编程之路上不断进步。

推荐面试题