簡體   English   中英

確定階乘 Function 的尾隨零的數量(javascript)

[英]Determine Number of Trailing Zeros of a Factorial Function (javascript)

我正在寫一個 function ,它返回一個階乘的尾隨零的數量。 對於每 5 個正增量,零的數量似乎從 0 開始增加。 但也會每增加 25 個增量就增加 1 個零,問題是當我傳入一個像 1000 這樣的數字時,它應該返回 249。但它卻返回 240? 我錯過了什么嗎?

我幾乎肯定有更好的方法來寫這個,但希望有人能告訴我我目前的 function 中缺少什么?

注意:此 function 不得計算實際階乘以確定尾隨零的數量。

 function zeros(n) { const extraZeros = n/25 const zeros = n/5 if(extraZeros >= 1) { return zeros + Math.floor(extraZeros) }else{ return Math.floor(zeros) } } console.log(zeros(0), 0); console.log(zeros(5), 1); console.log(zeros(6), 1); console.log(zeros(30), 7); console.log(zeros(60), 14); console.log(zeros(1000), 249); // missing 9 zeros?

任何幫助將不勝感激,謝謝!

對於每 5 個正增量,零的數量似乎從 0 開始增加。 但每增加 25 次也會增加 1 個零。

你是對的,但是再讀一遍這句話。 你看到圖案了嗎?

它還會為每 125 和 625 增量等增加一個零。您需要根據 5 的冪進行概括。

 const zeros = (n) => { let power = 1; let totalZeros = 0; while (n > 5 ** power) { totalZeros += Math.floor(n / (5 ** power)); power++; } return totalZeros; }; console.log(zeros(0), 0); console.log(zeros(5), 1); console.log(zeros(6), 1); console.log(zeros(30), 7); console.log(zeros(60), 14); console.log(zeros(1000), 249);

帕特里克·羅伯茨(Patrick Roberts)的另一種寫法:

 const zeros = (n) => { let totalZeros = 0; for (let power = 5; power < n; power *= 5) { totalZeros += Math.floor(n / power); } return totalZeros; }; console.log(zeros(0), 0); console.log(zeros(5), 1); console.log(zeros(6), 1); console.log(zeros(30), 7); console.log(zeros(60), 14); console.log(zeros(1000), 249);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM