[Java]尾部的零

尾部的零

描述

設計一個算法,計算出n階乘中尾部零的個數

您在真實的面試中是否遇到過這個題?  是

題目糾錯

樣例

11! = 39916800,因此應該返回 2

挑戰

O(logN)的時間複雜度

 

之前這個題目..emm...我按照我的第一想法寫的, (求出階乘, 再看有多少零)

但是測試數據裏竟然用105!這種瘋狂的數字=.=

然後果不其然, 程序爆了, 然後靈光一現...下面說一下思路:)

既然他讓求多少個零, 那麼, 在什麼情況下能夠得到 0 呢?

當然, 出現 5 的倍數的情況下, 不就會出現一個 0 嗎? (5 x 2 = 10)

那麼出現 5^2 的時候, 將會出現 00 的情況 (25 x 4 = 100)

以此類推.

那麼.....我們就得到我們想要的答案了

public class Solution {
    /*
     * @param n: An integer
     * @return: An integer, denote the number of trailing zeros in n!
     */
    public long trailingZeros(long n) {
        /**
         * 發現這道題可以巧算!
         * 計算0的個數,那我我們只需要知道在階乘的時候
         * 有多少5 相加就是最後的結果(=.=)
         * */
        long num_five = n / 5;
        long count = 0;
        while (num_five > 0){
            count += num_five;
            num_five /= 5;
        }
        return count;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章