172. 阶乘后的零

 

 

我们知道10=5*2,那么末尾0的个数实际上就是看2和5出现的次数,因为

只要是偶数就可以拆分成2*x,2的出现次数必然高于5,所以实际上结果

是由5的出现次数决定的。

比如25的末尾零=(1*5)(2*5)(3*5)(4*5)(5*5),在对5取余后由于25=5*5,所以实际上还有一层5,

由此可知,我们除了要计算5的个数,还需要计算25,125等5的次方出现的个数。

于是我们可以循环取模计算。

时间O(log5N)(不停对5去模),空间O(1)

    public int trailingZeroes(int n) {
        int res=0;
        while(n>0){
            // 循环递推5的阶乘
            n=n/5;
            res=res+n;
        }
        return res;
    }

 

posted @ 2021-04-19 10:21  jchen104  阅读(45)  评论(0编辑  收藏  举报