Si lo he entendido bien y es simplemente convertir un número binario a un número decimal el problema no es tan difícil. El hecho de no poder usar vectores supongo que indica que la intención del ejercicio es que realices el cálculo según vas viendo dígitos del número en binario (1 por 1) y no hagas cosas como primero leer la cinta y almacenarla en un vector para después hacer cálculos sobre eso.
El método para hacer la conversión leyendo dígito a dígito (imagínate que estás leyendo un dígito cada vez de un fichero o similar) depende de como supongas que se realiza la lectura de la cinta. Es decir, si empiezas por el bit menos significativo (X0) y vas avanzando o si empiezas por el bit más significativo (Xn).En cualquiera de los 2 casos no es necesario retrodecer la cinta y el cálculo se puede realizar en una "pasada".
Para el primer caso (empezar por X0 y seguir por X1,X2,...) el algoritmo es el típico:
int decimal=0;
int potencia=1;
while(actual(cinta) != -1){
decimal+=actual(cinta)potencia;
potencia=potencia2;
avanzar(cinta)
};
Para el segundo caso(empezar por Xn y seguir por Xn-1,Xn-2...) lo único que tienes que saber es qué le ocurre a un número binario cuando se le añade un dígito por la derecha:
-Si el dígito es 0: el número se multiplica por 2. Por ejemplo si tenemos el número binario 101 (5 decimal) y leemos un 0 quedaría el número 1010 (10 decimal).
-Si el digito es 1:el número se multiplica por 2 y se le suma 1. Por ejemplo si tenemos el número binario 101(5 decimal) y leemos un 1 quedaría el número 1011 (11 decimal).
Con esto es fácil darse cuenta de que el algoritmo es algo como:
int decimal=0;
while(actual(cinta) != -1){
decimal=decimal*2+actual(cinta);
avanzar(cinta);
};
Como dijo #4 luego la implementación real depende de como implementes la cinta, pero estos algoritmos son genéricos y podrás adaptarlos sea cual sea esa implementación.