第12回【JavaScript】階乗の計算、階乗の末尾に 0 はいくつ付く?

現在取り組んでいるのは、paiza ラーニング問題集「ループメニュー 2」になります。

はじめに

猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。

JavaScript をゼロから勉強してみよう、のコーナー 12 回目です。

電話が嫌いです。と、いつかどこかで書いた気もするけれど、電話が嫌いです。お客様とお話する機会は多いですが、出来れば電話は取りたくありません。まぁ、そうも言っていられないので、心を無にして電話に向き合うようにしていますが。なお、LeoSaki(旦那)の携帯は許可した数名以外、着信がならないようにしています。

それでは、今日も頑張ってみようと思います。

階乗の計算 (paizaランク D 相当)

整数 N が与えられます。
N の階乗 N! を計算して出力してください。


入力される値

N

・ 1 行で整数 N が与えられます。

入力値最終行の末尾に改行が1つ入ります。


期待する出力

N の階乗 N! を計算して出力してください。

また、末尾に改行を入れ、余計な文字、空行を含んではいけません。


すべてのテストケースにおいて、以下の条件をみたします。

・ 1 ≦ N ≦ 10


入力例

5

出力例

120

再帰を最初に考えるのだけれど、ループ処理の課題なので、真っ向勝負。for 文を利用した一発勝負。

JavaScript
process.stdin.resume();
process.stdin.setEncoding('utf8');

var lines = [];
var reader = require('readline').createInterface({
  input: process.stdin,
  output: process.stdout
});
reader.on('line', (line) => {
  lines.push(line);
});
reader.on('close', () => {
  const n = Number(lines[0]);
  let factorial = 1;
  for (let i = 1; i <= n; i++) {
      factorial *= i;
  }
  console.log(factorial);
});
Python
N = int(input())
factorial = 1
for n in range(1,N+1):
    factorial *= n
print(factorial)

階乗の末尾に 0 はいくつ付く? (paizaランク C 相当)

整数 N が与えられます。
N の階乗 N! の末尾に 0 がいくつ付くか求め、出力してください。


入力される値

N

・ 1 行で整数 N が与えられます。

入力値最終行の末尾に改行が1つ入ります。


期待する出力

N の階乗 N! の末尾に 0 がいくつ付くか求め、出力してください。

また、末尾に改行を入れ、余計な文字、空行を含んではいけません。


すべてのテストケースにおいて、以下の条件をみたします。

・ 100 ≦ N ≦ 1,000


入力例

100

出力例

24

Python で挑戦したときに調べました。5 で割った解を足し算していけばいい。

JavaScript
process.stdin.resume();
process.stdin.setEncoding('utf8');

var lines = [];
var reader = require('readline').createInterface({
  input: process.stdin,
  output: process.stdout
});
reader.on('line', (line) => {
  lines.push(line);
});
reader.on('close', () => {
  let n = Number(lines[0]);
  let cnt = 0;
  while (n > 0) {
      cnt += Math.trunc(n / 5);
      n /= 5;
  }
  console.log(cnt);
});
Python
N = int(input())
cnt = 0
while N > 0:
    cnt += N // 5
    N //= 5
print(cnt)

最後に

相変わらず、セミコロンを忘れたり、カッコを忘れたりします。paiza のコードを記述するスペースは、注意マークが付くのですぐに気が付くことが出来ます。たまに、ただのテキストエディタにコードを書いてみると、大抵、ミスをしています。

テキストエディタに JavaScrip のプラグインを入れていないので、そろそろ入れるべきだよなぁと思いながら後回しになっています。思い立ったときにしないといけませんね!

引き続き、よろしくお願いいたします!

Python の第12回はこちら