2進数を10進数に変換するプログラムを考えています。
#define MAX の値を変更しても、10桁以上の計算が出来ないのですが、どのように修正したら良いでしょうか?
intからdoubleに変えてみたのですが、浮動小数点の不正な使用となります。
また、0と1以外の数字が入力された際にエラーを出したいのですが、この判定はどうしたらよいでしょうか?
アドバイスお願いします。

#include <stdio.h>
#define MAX 10
main()
{
int x, z[MAX], i, c;
int a=1;
int b=1;

scanf("%d",&x);

for(i = 0;i<=MAX-1;i++){
z[i]=((x/a)%10)*b;

a*=10;
b*=2;

}

for(i=0;i<=MAX-1;i++){
c += z[i];

}
printf("%d\n",c);
return 0;
}