2進数文字列の10進数変換

■ 解き方の方針 2進数を左端から1桁ずつ読むときは、現在の値を1桁左へずらしてから、新しい桁を加えます。2進数で1桁左へずらすことは、値を 2倍すること です。 ■ 1桁読み込むごとの更新式 i文字目を読み込む直前までの値をresultとすると、更新後の値は次の式になります。 result × 2 + int(binaryのi文字目の文字) ■ “10010”で処理を追う i i文字目 result × 2 + int(…) result 1 1 0 × 2 + 1 1 2 0 1 × 2 + 0 2 3 0 2 × 2 + 0 4 4 1 4 × 2 + 1 9 5 0 9 × 2 + 0 18 最終結果が問題文の例と同じ18になるので、この更新式で正しいと確認できます。 ■ 正解と誤答の見分け方 したがって、正解は エ です。 resultを2倍しない式では、既に読んだ桁の位が上がりません。また「length - i + 1」文字目を使う式は右端から読むため、この更新方法とは組み合わせられません。

次のプログラム中の    に入れる正しい答えを、解答群の中から選べ。
関数 convDecimal は、引数として与えられた、“0”と“1”だけから成る、1文字以上の文字列を、符号なしの2進数と解釈したときの整数値を返す。例えば、引数として“10010”を与えると18が返る。
関数 convDecimal が利用する関数 int は、引数で与えられた文字が“0”なら整数値0を返し、“1”なら整数値1を返す。

[プログラム]
○整数型:convDecimal(文字列型: binary)
整数型:i, length, result
length ← binaryの文字数
result ← 0
for (iを1から length まで1ずつ増やす)
result ←   
endfor
return result

出典令和6年度 公開問題 基本情報技術者試験 科目B 問2
ア
result + int(binaryの (length - i + 1) 文字目の文字)
イ
result + int(binaryの i文字目の文字)
ウ

result × 2 + int(binaryの (length - i + 1) 文字目の文字)

エ

result × 2 + int(binaryの i文字目の文字)