第32問 10進数を2進数に直す
10進数の n(=13)を2進数の 1101 に直して表示するプログラムです。n を2でわったあまり(0か1)を下の位から順に取り出し、表示用の位(kurai=1, 10, 100, …)をかけて足していきます。あまりの出し方、足し方、位の上げ方を選択肢から選ぼう(3か所の穴をうめよう)
難易度:★★★★★(5/難しい)。共通テスト「情報I」で使われるDNCL(共通テスト用プログラム表記)の穴埋め問題です。JavaScriptを有効にすると、このページでプログラムを組み立てて実行しながら解けます。
プログラム
n = 13
nishin = 0
kurai = 1
n > 0 の間繰り返す:
amari = [A]
nishin = nishin + [B]
kurai = [C]
tsugi = n / 2
n = 切り捨て(tsugi)
表示する("2進数にすると" + nishin)
空欄 [A]・[B]・[C] に当てはまるものを、次の選択肢から選びます。
選択肢
n % 2
n / 2
amari * kurai
amari + kurai
kurai * 10
kurai * 2
ヒント
13 → あまり1(1の位)→ 6 → あまり0(10の位)→ 3 → あまり1(100の位)→ 1 → あまり1(1000の位)→ 0 で終わり。下から 1,0,1,1 を並べて 1101 です。n % 2 であまりを取り出し、amari * kurai で位に置き、kurai * 10 で次のけたへ進みます
解答
- 空欄 [A] …
n % 2
- 空欄 [B] …
amari * kurai
- 空欄 [C] …
kurai * 10
よくある間違い
- [A]
n / 2 [B]amari * kurai [C]kurai * 10 … 2進数の各けたは「2でわったあまり」です。n / 2 だと商(13÷2=6)になり、0か1になりません。n % 2 を使いましょう
- [A]
n % 2 [B]amari + kurai [C]kurai * 10 … あまり(0か1)は、そのけたの位に置きたいので位を「かけ」ます。amari + kurai だと、あまりが0のときでも位の数がそのまま足されてしまいます。amari * kurai なら、あまりが0のときは0が足されます
- [A]
n % 2 [B]amari * kurai [C]kurai * 2 … n を2でわるので位も2倍にしたくなりますが、答えは「1101」という10進の見た目で組み立てています。kurai * 2 だと 1, 2, 4, 8 になり、1+0+4+8=13 と元の数に戻ってしまいます。表示のけたを1つ上げるのは kurai * 10 です
- [A]
n % 2 [B]kurai * 10 [C]amari * kurai … 式を入れる場所が入れかわっています。nishin に足すのは「あまり×位」の amari * kurai、次に位を10倍するのが kurai * 10 です
- [A]
n / 2 [B]amari + kurai [C]kurai * 2 … 3か所とも違います。けたは n % 2 で取り出し、amari * kurai で位に置き、kurai * 10 で次のけたに進みます
ほかの問題