2 尾部的零

2021-08-14 15:14:04 字數 863 閱讀 5383

問題描述:

設計乙個演算法,計算出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...