n!尾随零的数量

给定一个整数 n ,返回 n! 结果中尾随零的数量。

提示 n! = n * (n - 1) * (n - 2) * ... * 3 * 2 * 1

示例 1:

复制代码
输入:n = 3
输出:0
解释:3! = 6 ,不含尾随 0

示例 2:

复制代码
输入:n = 5
输出:1
解释:5! = 120 ,有一个尾随 0

示例 3:

复制代码
输入:n = 0
输出:0

提示:

  • 0 <= n <= 104

统计因子 5

cpp 复制代码
class Solution {
public:
    int trailingZeroes(int n) {
        int count = 0;
        // 统计 n! 中的因子 5 的个数
        while (n >= 5) {
            n /= 5;
            count += n;
        }
        return count;
    }
};

基于尾随零的产生机制:每有一个因子 10,就会在数的末尾增加一个尾随零 。而 10 可以拆分成 2 * 5 ,因此我们只需要关注阶乘中有多少对 25 乘积。

在阶乘 n! = n * (n - 1) * ... * 1 中,因子 2 的数量总是比因子 5 的数量多,因为每个偶数都会贡献一个 2。因此,尾随零的数量由因子 5 的数量决定 。换句话说,阶乘中有多少个 5,就有多少个尾随零。

直接计算阶乘导致整数溢出,解答错误:

cpp 复制代码
class Solution {
public:
    int trailingZeroes(int n) {
        if(n==0) return 0;
        long long ans=1;
        for(int i=n;i>0;i--){
            ans *=i;
        }
        int f=0;
        while(ans%10==0){
            f++;
            ans/=10;
        }
        return f;
    }
};

计算阶乘时,数值迅速变得非常大,超出了 long long 类型可以存储的范围。为了避免溢出问题,并不需要实际计算阶乘本身。可以通过直接统计 n! 中有多少个因子 5 来解决问题。

相关推荐
千寻girling1 小时前
Python 是用来做 AI 人工智能 的 , 不适合开发 Web 网站 | 《Web框架》
人工智能·后端·算法
颜酱4 小时前
一步步实现字符串计算器:从「转整数」到「带括号与优化」
javascript·后端·算法
CoovallyAIHub1 天前
语音AI Agent编排框架!Pipecat斩获10K+ Star,60+集成开箱即用,亚秒级对话延迟接近真人反应速度!
深度学习·算法·计算机视觉
NineData1 天前
数据库管理工具NineData,一年进化成为数万+开发者的首选数据库工具?
运维·数据结构·数据库
木心月转码ing1 天前
Hot100-Day14-T33搜索旋转排序数组
算法
会员源码网1 天前
内存泄漏(如未关闭流、缓存无限增长)
算法
颜酱1 天前
从0到1实现LFU缓存:思路拆解+代码落地
javascript·后端·算法
颜酱1 天前
从0到1实现LRU缓存:思路拆解+代码落地
javascript·后端·算法
CoovallyAIHub2 天前
Moonshine:比 Whisper 快 100 倍的端侧语音识别神器,Star 6.6K!
深度学习·算法·计算机视觉