【5 kyu】計算N的階乘末尾幾個0,Number of trailing zeros of N!

原題目

Write a program that will calculate the number of trailing zeros in a factorial of a given number.javascript

http://mathworld.wolfram.com/...html

$$N! = 1 * 2 * 3 * 4 ... N$$java

zeros(12) = 2 # 1 2 3 .. 12 = 479001600
that has 2 trailing zeros 4790016(00)
Be careful 1000! has length of 2568 digital numbers.git

My solution

只有當有2*5出現的時候,末尾纔有可能出現0,而2的數量遠大於5,因此咱們只須要計算在N!中,有多少個5.函數

function zeros (n) {
  var num = 0;
  while ( n > 4 ) {
    n = Math.floor(n/5);
    num += n;
  }
  return num;
}

Math.floor()parseInt() 的區別

在上面的解答中,用到了Math.floor()對數字進行向下取整,咱們知道parseInt()也能達到一樣的效果,那二者有什麼區別嗎?code

1. 功能不一樣 htm

  • Math.floor(x):對數字進行向下取整。ip

  • parseInt(str, [radix]):函數可解析數字或者字符串,並返回其整數部分。其中radix爲可選參數,默認爲10進制。字符串

Math.floor('123');    // NaN
parseInt('123');       // 123

// 字符串首字符爲數字
parseInt('123a');       // 123

// 字符串首字符爲非數字
parseInt('a123');      // NaN

2. Math.floor()parseInt()在對負數進行取整時,結果是有差別的。get

Math.floor(-1.3);    // -2
parseInt(-1.3);      // -1
相關文章
相關標籤/搜索