過去問解きまくり研究所 ホーム

アルゴリズムとプログラミング|令和6年度 ITパスポート試験 問85

関数binaryToIntegerは,1桁以上の符号なし2進数を文字列で表した値を引数binaryStrで受け取り,その値を整数に変換した結果を戻り値とする。例えば,引数として“100”を受け取ると,4を返す。プログラム中のa,bに入れる字句の適切な組合せはどれか。

〔プログラム〕

```
○整数型: binaryToInteger(文字列型: binaryStr)
整数型: integerNum, digitNum, exponent, i
integerNum ← 0
for (i を 1 から binaryStr の文字数 まで 1 ずつ増やす)
digitNum ← binaryStr の末尾から i 番目の文字を整数型に変換した値
// 例: 文字“1”であれば整数値1に変換
exponent ← a
integerNum ← b
endfor
return integerNum
```

ab
(2 の i 乗)− 1integerNum × digitNum × exponent
(2 の i 乗)− 1integerNum + digitNum × exponent
2 の(i − 1)乗integerNum × digitNum × exponent
2 の(i − 1)乗integerNum + digitNum × exponent

解説

末尾から数えた桁の重みを掛けて、順に足していきます。

2進数を十進数に直すのは、基数が二である数の読み替えです。引数は文字列として渡されるので、一文字ずつ数に直して扱います。直すには、それぞれの桁の数字に、その桁の重みを掛けて足し合わせます。重みは末尾から数えて一つ目が一、二つ目が二、三つ目が四というように、二を掛けながら大きくなります。変数は末尾から数えた位置を表しているので、その位置が一のときに重みが一になる必要があります。よって重みは二の、位置から一を引いた乗になります。そして、その桁の数字と重みを掛けたものをそれまでの合計に足し込みます。よって合計に掛けるのではなく足す形が入ります。合計に掛けてしまうと、最初が零なので何を掛けても零のままになります。

ほかの選択肢はなぜ違うのか

この問題に関係する言葉

出典:令和6年度 ITパスポート試験 問85(改変:原典の図表をテキストに書き起こした)

この問題を演習で解く

同じ単元をまとめて解くならアルゴリズムとプログラミングへ。

この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)