LintCode 尾部的零

2021-07-05 17:11:34 字數 1444 閱讀 4999

尾部的零

設計乙個演算法,計算出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進製的數,讓結尾多乙個...