第9回【JavaScript】各桁の和、カウント変数を使った計算、2 で何回割れる?、任意の数で何回割れる?
現在取り組んでいるのは、paiza ラーニング問題集「ループメニュー 2」になります。
はじめに
猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。
JavaScript をゼロから勉強してみよう、のコーナー 9 回目です。
コロナに 2 回感染している私が言うのもなんですが、コロナへの警戒心が薄れてきているように思います。会食も増えました。しかし、感染力と感染後の自宅待機期間を考えると、うまく付き合っていく病気、にはなかなかならないんじゃないでしょうか。
それでは、今日も頑張ってみようと思います。
各桁の和 (paizaランク D 相当)
10 進数で表された整数 N が与えられます。
整数 N の各桁の和を計算し、出力してください。
入力される値
N
・ 1 行で整数 N が与えられます。
入力値最終行の末尾に改行が1つ入ります。
期待する出力
整数 N の各桁の和を計算し、出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。
すべてのテストケースにおいて、以下の条件をみたします。
・ 1 ≦ N ≦ 100,000
入力例
12345
出力例
15
切り捨ては floor() か trunc() か。今回は、分かりやすい trunc() を利用。
10 で割った余りが 1 の位の数値を表す。10 で割って小数点以下を切り捨てると、一桁右にずらすことが出来る。
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 = lines[0];
let ans = 0;
while (n > 0) {
ans += n % 10;
n = Math.trunc(n / 10);
}
console.log(ans);
});
Python
N = int(input())
ans = 0
while N > 0:
ans += N % 10
N //= 10
print(ans)
カウント変数を使った計算 (paizaランク D 相当)
N 個の整数 M_1, M_2, …, M_N があります。
i 番目の M を M_i とするとき、M_i * i
を改行区切りで出力してください。
例えば、M_5
が 3
の場合、3 * 5 = 15
となります。
入力される値
N
M_1 M_2 ... M_N
・ 1 行目に整数 N が与えられます。
・ 2 行目に N 個の整数 M_1, M_2, …, M_N が与えられます。
入力値最終行の末尾に改行が1つ入ります。
期待する出力
i 番目の M を M_i とするとき、M_i * i
を改行区切りで出力してください。
M_1 * 1
M_2 * 2
...
M_N * N
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。
すべてのテストケースにおいて、以下の条件をみたします。
・ 1 ≦ N ≦ 100
・ 1 ≦ M_i ≦ 100 ( 1 ≦ i ≦ N )
入力例
5
1 2 3 4 5
出力例
1
4
9
16
25
インデックスが 0 から始まることに注意すれば、後は簡単なのではなかろうか。
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 = lines[0];
const a = lines[1].split(/\s/).map(Number);
for (let i = 0; i < n; i++) {
console.log(a[i] * (i + 1));
}
});
Python
N = int(input())
A = list(map(int,input().split()))
for i in range(N):
print((i+1)*A[i])
2 で何回割れる? (paizaランク D 相当)
整数 N が与えられます。
N が何回 2 で割れるかを求め、出力してください。
入力される値
N
・ 1 行で整数 N が与えられます。
入力値最終行の末尾に改行が1つ入ります。
期待する出力
N が何回 2 で割れるかを求め、出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。
すべてのテストケースにおいて、以下の条件をみたします。
・ 1 ≦ N ≦ 100
入力例
4
出力例
2
日本語の問題。例えば、10 だったら、2 で割ることが出来るのは 1 回だけ。問題文に、「割り切れる」のは何回か、って書いておいて欲しかったです。
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 = lines[0];
let cnt = 0;
while (true) {
if (n % 2 == 0) {
n /= 2;
cnt++;
} else {
break;
}
}
console.log(cnt);
});
Python
N = int(input())
cnt = 0
while True:
if N % 2 == 0:
N //= 2
cnt += 1
else:
break
print(cnt)
任意の数で何回割れる? (paizaランク D 相当)
整数 N, M が与えられます。
N が何回 M で割れるかを求め、出力してください。
入力される値
N M
・ 1 行で整数 N, M が与えられます。
入力値最終行の末尾に改行が1つ入ります。
期待する出力
N が何回 M で割れるかを求め、出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。
すべてのテストケースにおいて、以下の条件をみたします。
・ 1 ≦ N ≦ 100
・ 2 ≦ M ≦ 100
入力例
4 2
出力例
2
これも、「割り切れる」回数を数えるもの。とわかれば、簡単だ。
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,m] = lines[0].split(/\s/).map(Number);
let cnt = 0;
while (true) {
if (n % m == 0) {
n /= m;
cnt++;
} else {
break;
}
}
console.log(cnt);
});
Python
N,M = map(int,input().split())
cnt = 0
while True:
if N % M == 0:
N //= M
cnt += 1
else:
break
print(cnt)
最後に
当ブログ「月とライオン」の検索ワードを見ていると、「各桁の和」で検索かけられている方がかなりいらっしゃるようです。数値を文字列で受けて、一文字ずつ分解して・・・、と、LeoSaki(旦那)が Python のときに書きましたが、やっぱり数学的にはおかしなコードだと思います。
10 で割った商や余りを上手に利用することを覚えておけば、いろんな場面で応用が利くと思いますので、是非、マスター目指してください。LeoSaki(旦那)はこれについてはお手の物です!
引き続き、よろしくお願いいたします!
ディスカッション
コメント一覧
まだ、コメントがありません