LintCode 2 尾部的零

2021-08-15 03:59:03 字數 697 閱讀 8703

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

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

yes樣例11! = 39916800

,因此應該返回 2

解題思路:

要求n的階乘,就是求1到n這n個數相乘。在這1到n個數當中,只有2和5相乘的結果才會出現0,其中10的倍數也可以看做是2和5相乘的結果,所以,可以在1到n之間看看有多少個數是2的倍數以及多少個數是5的倍數就行了。容易發現2的倍數的數一定多於5的倍數的數,因此可以只看n前面有多少個5就行了,於是n/5可以得到1到n內有多少個數是5的倍數。此外,還有一些特殊情況,比如25這種,其是5和5相乘的結果,這種數和4相乘會出現2個0,同理125和8相乘會出現3個0,……,所以,還要看n/5裡面有多少個5,比如n=125,125個數里有25個數是5的倍數,125裡又有125/25=5個數是25的倍數。每個25的倍數又會多乙個0。因此125! 的末尾0的個數就是125/5 + 125/5/5 + 125/5/5/5。其中最後一項表示125的個數,因為125和8相乘會出現3個0。如果下面還有,比如625,即需要再迴圈一次,就是625的個數,625乘以16會出現4個0,需要再加1,依次類推……

public static long trailingzeros(long n) 

return sum;

}

LintCode 2 尾部的零

問題描述設計乙個演算法,計算出n階乘中尾部零的個數 樣例 11 39916800,因此應該返回 2 問題分析按正常的思路看,第一步 把 n 求出。第二步 用得到的這個數取餘10的倍數,從10開始,再到100,再到 n 10 餘數為0,計數器加1,直到餘數不為零結束,返回計數器數值。於是有了如下 cl...

Lintcode 2 尾部的零

問題描述 設計乙個演算法,計算出n階乘中尾部零的個數 樣例說明 樣例 1 輸入 11 輸出 2 樣例解釋 11 39916800,結尾的0有2個。樣例 2 輸入 5 輸出 1 樣例解釋 5 120,結尾的0有1個。3.思路 根據題目要求,輸入的n是乙個長整型的數。我們想要求階乘尾部零的個數,那麼這時...

LintCode 2 尾部的零

答案 描述 設計乙個演算法,計算出n階乘中尾部零的個數 您在真實的面試中是否遇到過這個題?樣例 11 39916800,因此應該返回 2 挑戰 o logn 的時間複雜度 小結 從最終的 來看,問題是挺簡單的。之所以折騰這麼久都沒有切入要害,直接做到真正的時間複雜度為o logn 的效果,個人覺得是...