You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不计算阶乘直接求解大数阶乘的末尾零个数(Java)

不计算阶乘统计末尾零的个数

你贴的这段代码根本处理不了大数字的情况——当n稍微大一点,long类型直接就溢出了,连正确的阶乘结果都存不住,更别说统计末尾零了。

要不用计算阶乘的方式统计末尾零,核心逻辑很简单:

  • 阶乘末尾的零全来自因数中的10,而10 = 2 × 5
  • 在阶乘的所有因数里,2的数量远多于5,所以只需要统计n!中包含多少个因数5,就是末尾零的总数

具体的计算方法是:不断用n除以5,把每次的商累加起来,直到商为0为止。比如计算25!的末尾零:

  • 25 ÷ 5 = 5,5 ÷ 5 = 1,1 ÷ 5 = 0
  • 总和是5 + 1 = 6,所以25!末尾有6个零

对应的代码可以写成这样:

public int countTrailingZeros(int n) {
    int count = 0;
    while (n >= 5) {
        n /= 5;
        count += n;
    }
    return count;
}

这段代码的逻辑很直白:每次把n缩小为原来的1/5(取整),累加的结果就是所有能分解出5的因数的总个数,也就是末尾零的数量。不管n多大,都能快速算出结果,完全不会有溢出问题。

内容的提问来源于stack exchange,提问作者Noah Solomon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 21:45:35