第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 のプラグインを入れていないので、そろそろ入れるべきだよなぁと思いながら後回しになっています。思い立ったときにしないといけませんね!
引き続き、よろしくお願いいたします!
ディスカッション
コメント一覧
まだ、コメントがありません