尾部的零
設計乙個演算法,計算出n階乘中尾部零的個數
樣例 11! = 39916800,因此應該返回 2
挑戰 o(logn)的時間複雜度
solutioin: **factorials and trailing zeroes
1.計算 23!
有多少個尾0 23!
=1×2
×3×4
×5×6
×7×8
×9×10
×11×12
×13×14
×15×16
×17×18
×19×20
×21×22
×23(如果我們使用計算器計算23!
有多少個尾0的話,其實比沒有多大的幫助,因為計算結果會以科學算術的符號表示。)
如果10是乙個數的因子的話那麼其尾部肯定會有0。例如10是50,120和1234567890的因子,所以我們需要去計算出10的因子有多少在23!
的展開式中。但是5×
2=10 , 我們需要計算出所有2和5的乘積。在上面的因子展開式中,2(
2,4,
6,8,
10,12,
14,..
.)的倍數要比5(
5,10,
15,..
.)的多很多。因此,我們只需要計算出上面的因子展開式中多少數字能被5整除。
對於1到23中有多少個數字能被5整除? 5,10,15和20。因此23!
的尾零有4個。
code:
class solution while(n /= 5);
return res;
}};
計算
101!
有多少個尾0
在1到101中有多少個數是5的倍數。5,
10,15,
20,25,
...。
, 一種更加簡潔的求法,因為
101÷5=
20(省略
小數點)
,因為25=
5×5 所以能被25整除的是另外的5的倍數。
101÷5=
4 (省略小數點)。因此
101!
的尾零數為20+
5=25
總結:
1. 獲取計算階乘的這個數, 比如(
101!
則取101)
2. 將這個數除以
5 ,只取整數部分(以下相同)
3. 除以52
(25)4. 除以53
(125)
5. 繼續除以5的更高次冪,直到結果小於1。
6. 將以上所有的除法結果相加,就是尾零數的個數
code
class
solution
};
lintcode尾部的零
設計乙個演算法,計算出n階乘中尾部零的個數 class solution param n an integer return an integer,denote the number of trailing zeros in n deftrailingzeros self,n write your ...
LintCode 尾部的零
設計乙個演算法,計算出n階乘中尾部零的個數 樣例 1 輸入 11 輸出 2 樣例解釋 11 39916800,結尾的0有2個。樣例 2 輸入 5 輸出 1 樣例解釋 5 120,結尾的0有1個。這個題很多人都分析出了只要判斷n 5以及n 5 2,一直到n 5 m,把他們累加起來就可以了。其中m要求n...
LintCode 第二題 尾部的零
描述 設計乙個演算法,計算出n階乘中尾部零的個數 樣例 11 39916800,因此應該返回 2 假如你把1 2 4 n中每乙個因數分解質因數,結果就像 1 2 3 2 2 5 2 3 7 2 2 2 10進製數結尾的每乙個0都表示有乙個因數10存在 任何進製都一樣,對於乙個m進製的數,讓結尾多乙個...