每日一題之 經典面試題 N!末尾有多少個0

2021-08-28 02:29:26 字數 860 閱讀 5327

問題:n的階乘(n!)中的末尾有多少個0?

例如:

n = 5,n! = 120.末尾有1個0.

n = 10,n! = 3628800.末尾有2個0。

分析:看到這個問題,有人可能第一反應是先求出n!,然後再根據求出的結果,最後得出n!的末尾有多少個0。但是轉念一想,會不會溢位。

其實,從」哪些數相乘可以得到10」這個角度,問題就變得比較的簡單了。

首先考慮,如果n的階乘為k和10的m次方的乘積,那麼n!末尾就有m個0。

n的階乘可以分解為: 2的x次方,3的y次方,5的次z方…..的一系列質因子相乘。由於10 = 2 * 5,所以m只能和x和z有關,每一對2和5相乘就可以得到乙個10,於是m = min(x,z),因為是階乘,所以2的次方x大於5的次方z,因為被2整除的頻率比被5整除的頻率高的多。所以可以把公式簡化為m=z.

由上面的分析可以看出,只要計算出z的值,就可以得到n!末尾0的個數

方法一

要計算z,最直接的方法就是求出n的階乘的所有因式(1,2,3,…,n)分解中5的指數。然後求和

int

fun1(int

n) }

return

num;

}

方法二:

z = n/5 + n /(5*5) + n/(5*5*5)…..直到n/(5的k次方)等於0

公式中 n/5表示不大於n的數中能被5整除的數貢獻乙個5,n/(5*5)表示不大於n的數中能被25整除的數再貢獻乙個5…….

int

fun2(int

n) return

num;

}

一題四解 SQL經典面試題

表結構以及資料如下 create table 表 id int,日期 varchar 11 單據 char 3 insert into 表 id 日期 單據 values 1 2004 08 02 001 insert into 表 id 日期 單據 values 2 2004 09 02 001 ...

一題多解 面試題

最近在其他論壇上看到幾個的面試題,這些天,qq群內的人都在討論怎麼解答才最簡單,下面列出題目 檔案a 檔案b a b c a b c b c a b c a c b a c a b a a a 1 1 1 b b b 2 2 2 c c c 3 3 3 要求合併2個檔案如下 a b c a b c ...

一題多解 面試題

最近在其他論壇上看到幾個的面試題,這些天,qq群內的人都在討論怎麼解答才最簡單,下面列出題目 檔案a 檔案b a b c a b c b c a b c a c b a c a b a a a 1 1 1 b b b 2 2 2 c c c 3 3 3 要求合併2個檔案如下 a b c a b c ...