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

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

樣例

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

思路

   也行你覺得很簡單,不就是先計算11!=39916800,但是你想想計算11!現在還行,那如果是111111111111!,要計算多少時間呢??
       0是怎麼出來的,只有2和5相乘的結果纔會出現0,以在1到n之間看看有多少個數是2的倍數以及多少個數是5的倍數就行了。
此外,還有一些特殊情況,比如25這種,其是5和5相乘的結果,這種數和4相乘會出現2個0,同理125和8相乘會出現3個0,……,
每個25的倍數又會多一個0。因此125! 的末尾0的個數就是125/5 + 125/5/5 + 125/5/5/5。
就是625的個數,625乘以16會出現4個0,需要再加1,依次類推……

代碼

class Solution {
    /*
     * param n: As desciption
     * return: An integer, denote the number of trailing zeros in n!
     */
    public long trailingZeros(long n) {
        long sum=0;
        while(n>0)
        {
            n/=5;
            sum+=n;
        }
        return sum;
    }
};
發佈了34 篇原創文章 · 獲贊 18 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章