172. 阶乘后的零

这篇博客探讨了如何计算阶乘结果中尾随零的个数,提出了原始算法和官方优化后的算法。原始算法通过不断除以5来计数,而优化后的算法直接将n除以5并累加,提高了效率。该问题的关键在于理解尾随零由2和5的乘积决定,尤其是5的数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

我的思路:尾随零的个数取决于每个乘数可以分解为多少个5相乘,如25可以分成5*5

代码如下:

public int trailingZeroes(int n) {
    int res = 0;
    for (int i = 5; i <= n; i+=5) {
        int val = i;
        while (val != 0 && val % 5 == 0){
            val = val / 5;
            res++;
        }
    }
    return res;
}

结果:

 官方给出的优化:

public int trailingZeroes(int n) {
    int zeroCount = 0;
    long currentMultiple = 5;
    while (n > 0) {
        n /= 5;
        zeroCount += n;
    }
    return zeroCount;
}

 等价于

能被5整除则加一,还能再被5整除就再加一

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值