題目描述:
給出一個integer n,計算n!結尾0的個數
題目分析:
考慮暴力,計算n!統計最后面0的個數。先不說數字溢出,其次n是一個integer ,O(n)復雜度超時
?
我們接著考慮,產生0的情況
只有包含因子5的數乘以一個偶數會在結尾產生0(5*2,15*2,75*2),因為偶數的個數大于因子包含5的數的個數,那么我們只要考慮包含因子5的數;
?
但是是不是包含因子5的數一定只會在結尾產生一個0呢,對于25*4提供兩個0,這是因為25,包含兩個因子5(5*5);同樣125會提供3個0;
?
這樣只要考慮1-n之間有多少包含因子5的數,有多少個包含因子25的數,有道少個包含因子125的數。。。。以此累加
?
代碼:
1 int trailingZeroes(int n) { 2 int mod=5; 3 int cnt=0; 4 while(n/mod){ 5 cnt+=n/mod; 6 mod*=5; 7 } 8 return cnt; 9 }
?