題目:求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的倍數...