問題描述:
設計乙個演算法,計算出n階乘中尾部零的個數
樣例11! = 39916800
,因此應該返回 2.
這個問題相信很多老鐵都已經遇到過了,很經典的乙個題目,還是那句老話,重要的是考慮的過程,是如何想到以5的個數來統計0的個數呢?又是如何想到除以25、除以125... ...的呢?這些事重點。
首先n!中,哪些數字相乘可能會出現0呢,最簡單的也是最根本的2*5(即使是10、20... ...也是由2*5構成的呀),而2的個數太多,所以只需要去統計5的個數,因為5的個數決定了0的個數。具體分析見**注釋。
#include
using namespace std;
/*1、 每隔 5個,會產生乙個0,比如 5, 10 ,15,20.。。
2 、每隔 5×5 個會多產生出乙個0,比如 25,50,75,100 (比如說25,在統計5的個數時,只計數了一次5的個數,但實際上25由兩個5組成,少統計乙個5,在這裡再統計一遍能被25整除的個數補上。)
3 、每隔 5×5×5 會多出乙個0,比如125.(道理同上)
... ...
*/long long trailingzeros(long long n)
return count;
}int main ()
在lintcode上測試通過,ac100%.
注意我一開始在定義時m和count定義為int型,但是不能全部ac,因為int和long long表示的數長度不一樣,所以還是要注意。
在這裡就順便複習下int和long long表示整數時的區別:int 2147483648~2147483647; long long :-9223372036854775807~9223372036854775808
2 尾部的零
問題描述 設計乙個演算法,計算出n階乘中尾部零的個數。樣例 11 3991680011 39916800 因此應該返回 2。解答 js實現 const trailingzeros function n return sum 分析 思考乙個數尾部的零是怎麼得來的,乘以10對吧,所以n的階乘尾部有多少零...
2 尾部的零
描述 設計乙個演算法,計算出n階乘中尾部零的個數。樣例 11 39916800,因此應該返回 2 挑戰 o logn 的時間複雜度 分析 假如你把1 2 4 n中每乙個因數分解質因數,結果就像 1 2 3 2 2 5 2 3 7 2 2 2 10進製數結尾的每乙個0都表示有乙個因數10存在 任何進製...
2 尾部的零
剛看到這道題時沒多考慮,就是利用階乘算出結果然後轉為字元陣列,判斷零的個數 剛發現判斷的地方寫錯了 但是如果輸入的值非常大,超過了取值範圍,就會報錯,而且這道題的思路不是這樣的 我是個沒有腦子的人!思路 乘積中出現0一定是2和5的乘積具體思路就不寫了,別人都寫好了 public class seco...