Vimos en la explicación del operador MOD un ejemplo de hacer un cambio de base de un número decimal a un binario. En esta oportunidad lo que haremos es generalizar este ejemplo y hacer un programa en C++ que haga el cambio de base del decimal a uno cualquiera que introduzcamos por pantalla.
Un ejemplo de ejecución sería el siguiente:
Lo que vemos en este ejercicio es el uso de:
- El operador MOD (%)
- El iterador do-while y
- El iterador for con índice creciente y decreciente
A continuación os dejo el código y podríamos pensar algunas variantes como la representación en base hexadecimal teniendo en cuenta las letras.
int main(int argc, char** argv) {
int base10;
int baseN;
char res[50]; //array que almacena los residuos según los va calculando
int nRes = 0;
char res2[50]; //array que almacena los residuos con la lectura inversa (resultado final)
printf("Ingresa un numero en base decimal:");
scanf("%d", &base10);
printf("\nIngresa la base a la que quieres cambiar:");
scanf("%d", &baseN);
int q = base10;
int r = 0;
//calcula residuos hasta que el cociente es 0
do{
r = q % baseN; //calcula residuo
q = q / baseN; //recalcula la nueva "q" para la siguiente iteración
res[nRes] = r; //concatena el residuo al resultado
nRes++; //número de cifras del resultado
}while(q > 0);
//invierte el resultado (la lectura de los residuos es invertida)
for(int i = (nRes - 1); i >= 0; i--) res2[nRes - i - 1] = res[i];
//imprime resultado en pantalla
printf("\n%d en base %d es: ", base10, baseN);
for(int i = 0; i < nRes; i++) printf("%i", res2[i]);
return 0;
}