從最高位開始讀取字元,每讀一位,當前值 = 前序值 × 2 + 當前位。遞歸參數傳遞「已處理位數」與「累積值」。
#include <stdio.h>
int binToDecRec(const char *s, int idx, int acc) {
if (s[idx] == '\0' || s[idx] == '#') return acc; // 結束符
int bit = s[idx] - '0'; // '0'->0, '1'->1
return binToDecRec(s, idx + 1, acc * 2 + bit);
}
int main() {
char str[65];
printf("請輸入二進位字串 (以 # 結束): ");
scanf("%64s", str); // 讀取至空白或 #,若含 # 需用 fgets
// 簡化:假設輸入純 0/1 字串
int result = binToDecRec(str, 0, 0);
printf("十進位值: %d\n", result);
return 0;
}
scanf("%c", c):c 未取址,且只讀單一字元。change(n+1, sum, m):參數傳遞混亂,sum/m 應為指標或回傳值。pow(2, *m-n):浮點運算不必要,整數左移或乘 2 即可。int binToDecIter(const char *s) {
int val = 0;
while (*s == '0' || *s == '1') {
val = val * 2 + (*s - '0');
s++;
}
return val;
}
val > INT_MAX/2)。二進位轉十進位是理解位元運算與數制轉換的基礎練習,遞歸與迭代兩種寫法各有教學與工程價值。