尾部的零

设计一个算法,计算出n阶乘中尾部零的个数


首先我思考,尾数为零是10 也就是5 * 2造成的 由于在n的阶乘中2的数目肯定大于5的数目,所以我们只需要考虑5的数量

一开始我的代码是这样的

public long trailingZeros(long n) {
    long result = 0;
    for(int i = 5;i<=n;){
       int num3 = i;
       
       while(num%5==0){
       num = num/5;
       result++;
       }
                
    }
    return result;
}
 
            

但是这样时间超出很多,然后我思考别的方法,中间思考了使用对数等等方法,后来回归开始想如何计算5的数目,然后发现了一个规律,每5个5出现一个 25 每5个25出现一个125。。。
这样的话 将初始数/5就是 5的一次方的数量 再/5就是5的二次方的数量 以此类推,全部累加,就能获得最后的答案

代码如下

public long trailingZeros(long n) {
    long result = 0;
    while(n>=5){
    n/=5;
    result+=n;
    }
    return result;
}

这是一个算法菜鸟的思路历程,如果大佬有更好的想法可以在评论区评论

你可能感兴趣的:(尾部的零)