#include <iostream>
#include <math.h>
using namespace std;
int Binary2Decimal(int n){
	static int ex=-1;
	ex++;
	if(n%10!=n){
		return Binary2Decimal(n/10)+(pow(2,ex)*(n%10));
	}
	else{
		return pow(2,ex)*n;
	}
}
int main(){
	int n;
	cout<<"input a binary:\n";
	cin>>n;
	cout<<"Output:\n"<<Binary2Decimal(n);
}
想問一下哪裡出了問題
你的邏輯我有點不大會思考,
我改成這樣子你試試看
#include <iostream>
#include <math.h>
using namespace std;
int Binary2Decimal(int num) {
	if (num >= 10) {
		int dev = num / 10;
		int mod = num % 10;
		return Binary2Decimal(dev) * 2 + mod;
	}
	else {
		return num;
	}
}
int main() {
	int n;
	cout << "input a binary:";
	cin >> n;
	cout << "Output:" << Binary2Decimal(n) << endl;
	system("pause");
}
關鍵原因是在那個 ex
你以為 ex 是 -1,0,1,2,3...逐漸加一
在「去程」是如此沒錯
然而實際在遞迴的「回程」路上 ex 已經是最後一個值
也就造成答案不是 8+4+0+1 (以 1101 為例, ex=3)
而是 8+8+0+8 (2^3 加三次)
修正方法是「用另一個變數把 ex 計算出的值存起來」
改成以下即可(Line A,B)
int Binary2Decimal(int n){
	static int ex=-1;
	ex++;
	if(n%10!=n){
	    int digit = (pow(2,ex)*(n%10));     // Line A
	    return Binary2Decimal(n/10)+digit;  // Line B
	}
	else{
	    return pow(2,ex)*n;
	}
}