第36問 10進数を2進数に直す
整数 num(=13)を2進数の表記(1101)に直して表示するようにしよう。2でわったあまり(0か1)が、下の桁から順に並びます。あまりに位の重み kurai(1, 10, 100, …)をかけて nishin にたし、num を2でわって桁をひとつ減らすことを、num が0になるまで繰り返します(3か所の穴をうめよう)
難易度:★★★★☆(4/やや難しい)。単元:繰り返し。共通テスト「情報I」で使われるDNCL(共通テスト用プログラム表記)の穴埋め問題です。JavaScriptを有効にすると、このページでプログラムを組み立てて実行しながら解けます。
プログラム
num = 13
nishin = 0
kurai = 1
num > 0 の間繰り返す:
amari = num [A] 2
nishin = amari [B] kurai + nishin
kurai = kurai * 10
shou = num [C] 2
num = 切り捨て(shou)
表示する("2進数にすると" + nishin)
空欄 [A]・[B]・[C] に当てはまるものを、次の選択肢から選びます。
選択肢
ヒント
num % 2 であまり(0か1)を取り出し、それに位の重み kurai をかけて nishin にたす、そして num / 2 で桁をひとつ減らす、と考えよう。13 → 1 → 01 → 101 → 1101 の順に下の桁から組み立てていきます
解答
- 空欄 [A] …
%
- 空欄 [B] …
*
- 空欄 [C] …
/
よくある間違い
- [A]
/ [B]* [C]/ … 2進数の各桁になるのは「2でわったあまり」です。/ だと商(13÷2=6.5)になり、0か1になりません。% を使って 13 % 2 = 1 としましょう
- [A]
+ [B]* [C]/ … たし算では 13 + 2 = 15 となり、桁の0か1になりません。あまりを出す % を使いましょう
- [A]
% [B]+ [C]/ … あまり(0か1)を正しい桁に置くには、位の重み kurai をかけます。amari + kurai だと 1 + 100 のように位がずれてしまいます。* を使いましょう
- [A]
% [B]- [C]/ … ひき算では nishin がマイナスの方向にずれてしまいます。あまりを位の重みにのせるので amari * kurai です
- [A]
% [B]* [C]% … 桁をひとつ減らすには2で「わって」商にします。% だと num が 13 % 2 = 1 のあと 1 % 2 = 1 のまま変わらず、繰り返しが終わりません。/ を使いましょう
- [A]
% [B]* [C]* … かけ算では num がどんどん大きくなり、0にならないので繰り返しが終わりません。桁を減らすのは num / 2 です
- [A]
% [B]* [C]- … ひき算だと 13→11→9… と2ずつしか減らず、桁を半分にできません。2進数では2でわって商にします
この単元の解説動画
ほかの問題