令和6年度 問85
2 進数文字列を整数に変換するプログラム
出典: 令和6年度 ITパスポート試験 公開問題 問85 (IPA)
関数 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- ア a: (2 の i 乗) − 1,b: integerNum × digitNum × exponent
- イ a: (2 の i 乗) − 1,b: integerNum + digitNum × exponent
- ウ a: 2 の (i − 1) 乗,b: integerNum × digitNum × exponent
- エ a: 2 の (i − 1) 乗,b: integerNum + digitNum × exponent
正解と解説を見る
正解: エ
- ア: a が (2 の i 乗) − 1 では桁の重みになりません。b も掛け算では合計になりません。
- イ: b は合計を求める式として合っていますが、a が (2 の i 乗) − 1 では桁の重みになりません。
- ウ: a は合っていますが、b が掛け算では合計になりません。
- エ: a は 2 の (i − 1) 乗 (桁の重み)、b は integerNum + digitNum × exponent (加算) です。正しい答えです。
ポイント
2 進数の各桁には、右から順に 2⁰, 2¹, 2², … の重みがあります。
- i は文字列の末尾から i 番目を表すので、その桁の重みは 2 の (i − 1) 乗 → a
- その桁の値 (0 か 1) × 重みを、これまでの合計に加えていく → b = integerNum + digitNum × exponent
例: "100" のとき
- i = 1: 0 × 2⁰ = 0 → 合計 0
- i = 2: 0 × 2¹ = 0 → 合計 0
- i = 3: 1 × 2² = 4 → 合計 4
広告
「アルゴリズムとプログラミング」をこのサイトで解く (記録・間違えた問題の解き直し・AI教師への質問)
広告