正解は エ
2進数文字列を10進数整数に変換するconvDecimal関数の空欄を問う問題です。例:"10010" → 18。変換アルゴリズムの考え方:2進数を10進数に変換する際、右から順に各桁に2のべき乗を掛けて合計する方法が直感的ですが、プログラムでは「左から読みながら順次2倍して足す」ホーナー法(Horner's method)が効率的です。ホーナー法の動作例("10010"):初期値result=0。i=1(文字「1」):result = 0 × 2 + 1 = 1。i=2(文字「0」):result = 1 × 2 + 0 = 2。i=3(文字「0」):result = 2 × 2 + 0 = 4。i=4(文字「1」):result = 4 × 2 + 1 = 9。i=5(文字「0」):result = 9 × 2 + 0 = 18。最終的にresult=18が返ります。プログラム中の空欄は「result × 2 + int(binary の i 文字目の文字)」となり、選択肢Dが正解です。ループは左から右へ(i=1からlengthまで)進み、各ステップで現在値を2倍して新しい桁を加えます。
2進数→10進数変換のホーナー法:「result = result × 2 + 今の桁の値」を左から順に繰り返す。文字列の左端から読む(i文字目)×2倍して加算する、この組み合わせが正しい実装。選択肢の「×2があるか」「左から読んでいるか」の2点を確認。