常見演算法之15 求N!末尾有多少個0

2022-03-14 17:22:43 字數 656 閱讀 7720

題目:求n!末尾有多少個0

方案一:暴力法。

分析:這很容易造成溢位得到錯誤的結果,並且運算的時間也較長。若是面試的時候你這樣解,那麼可以say goodbye了。

方案二:其實

沒有必要求出最後的結果再去數究竟有多少個0。

我們可對乙個數進行分解,分解成盡可能小的數字相乘的形式(其實也就是盡可能小的素數相乘),你會發現0只會**於2*5。

所以我們可以看看有多少個2和5成對出現。

而在階乘之中,顯而易見2的個數一定是多於5的個數,所以我們就看看出現了多少個5。

以1234!為例,末尾為5的數有1234/5 = 246個,但這246個數中其實還有包含5存在的數(因為會包含25,125這種除以5之後,還能被5整除的數字)

故,該方法可總結為:  

1 將該數用5除,得到的商取整數。  

2 然後再用所得商當被除數除以5,得到的商取整數。  

3 持續做到商等於0為止。  

4 過程中的商加總即為階乘的尾數0的個數。  

**:

int f(int n)

return sum;

}

求N!末尾有多少個0

思考 該題實際上是求 2 5 因子對的個數。對於任意乙個階乘,5因子的個數總是小於2因子的個數,僅需考慮n 中5因子的個數 方法 1 將該數用 5 除,得到的商取整數。2 然後再用所得商當被除數除以 5,得到的商取整數。3 持續做到商等於 0 為止。4 過程中的商加總即為階乘的尾數 0 的個數。例 ...

2012 09 03 求N 末尾有多少個0

n 末尾有都少個0,首先追本溯源0是怎麼得來的,所有的0都是由質因數2和5相乘得到的。那麼對所有的n 在內的n個數進行質因數分解,只需要計算2和5的個數,取其中較小的乙個,即能得到n 有多少個0。1 要對n個數進行質因數分解,採取最暴力的方式也能解決,當n很大的情況下就不再適用了,那麼有沒有一種方法...

求N 中末尾有多少個0

分析 對n進行質因數分解 n 2 x 3 y 5 z.由於10 2 5,所以末尾0的個數只和x與z有關,每一對2和5相乘可以得到乙個10,於是末尾0的個數 min x,z 在實際中x是遠遠大於z的,所以我們只要求出z的值即可。根據公式 z n 5 n 5 2 n 5 3 n 5 k 這表明,5的倍數...