計算出 n! 結果後判斷,是不可以行的,結果太大會溢位。
有這樣的現象:從0開始,每加5,其階乘尾部便會增加乙個0。比如:5!有乙個0,10!有兩個0,15!有三個0...
現象的原因:5和任意偶數相乘就會產生0,而偶數的個數遠比5的個數多,所以每增加5 結尾就會增加乙個零。
按照這個現象:n! 尾部0的個數 == n/5。
可是這樣還不完善,因為沒有考慮到:每次加 5 到了 5 的次方時,會出現增加多個 0 的現象。也就是5*5*...和多個偶數相乘就會產生多個零。
所以:n! 尾部0的個數 == n/5 + n/5*5 + n/5*5*5...
int countzero(int n)
return ret;
}分析:上述第一次迴圈是n/5,表示含有 5 的個數。
第二次迴圈是n/5/5,表示含有 5*5 的個數。
第二次迴圈是n/5/5/5,表示含有 5*5*5 的個數。
...
演算法學習並不是完全為了面試,對程式設計師的編碼能力提公升也是很大的。 n 階乘末尾有多少個零0
題目 初階 1 2 3 100 求結果末尾有多少個零。高階 n的階乘末尾有多少個0 分析 一般類似的題目都會蘊含某種規律或簡便方法的階乘末尾乙個零表示乙個進製,則相當於乘以10而10 是由2 5所得,在1 100當中,可以產生10的有 0 2 4 5 6 8 結尾的數字,顯然2是確定的,因為4 6 ...
N的階乘末尾有多少個零
問題 n的階乘 n 中的末尾有多少個0?例如 n 5,n 120.末尾有1個0.分析 想到這個問題,有人可能第一反應就是現求出n 然後再根據求出的結果,最後得出n 的末尾有多少個0。但是轉念一想,會不會溢位,等等。其實,從 那些數相乘可以得到10 這個角度,問題就變得比較的簡單了。首先考慮,如果n的...
計算n的階乘有多少個尾隨零
之前的思路是根據1 10,10個數乙個區間分析乙個區間產生多少個零,發現這個方法不靠譜,隨後閱讀資料發現以下思路 我們會發現乙個因子2和因子5組合產生乙個0,這樣我們只需統計1到n有多少個因子對,即n!的尾隨零個數,因子2的個數比因子5的個數多,因此我們只需統計出因子5的個數即可,如 統計一次5的倍...