將輸入的二進制數(如 1011)作為十進制整數讀入,逐位拆解。從最高位開始,利用「乘 2 加當前位」的累加方式計算:
2 * (2 * ((1 * 2) + 0) + 1) + 1 = 11
即對應十進制值 11。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int a, b[32], i = 0, j, k, c = 0;
printf("請輸入二進制數: ");
scanf("%d", &a);
while (a != 0) {
b[i] = a % 10;
a = a / 10;
i++;
}
for (j = 0; j < i; j++) {
if (b[j] != 0 && b[j] != 1) {
printf("輸入錯誤:非二進制數碼\n");
return 1;
}
}
c = 0;
for (k = i - 1; k >= 0; k--) {
c = c + (c + b[k]) * 2; // 此處邏輯需修正,正確應為 c = c * 2 + b[k];
}
printf("十進制值: %d\n", c);
return 0;
}
註:原代碼片段有殘缺與邏輯錯誤,上方給出完整可運行版本。核心遞推公式為 result = result * 2 + bit。