Sep 25
Convertir un entero base 10 a binario en Java (Recursivo)
En este ejemplo tenemos una aplicación simple que pide un número y lo convierte a binario utilizando un algoritmo recursivo con una variable externa.
Lo primero que tenemos que saber es cómo convertir un número de base 10 a binario, (base 2). Para ello, se divide el número deseado entre 2 y cada resultado de la división tantas veces como sea necesario hasta obtener el número indivisible, el 1. Luego se toman el último resultado, 1 y todos los restos de las divisiones, viendo la imagen va a quedar mucho más claro el concepto.

A continuación veremos el código en Java necesario para pedir el número en base 10 y devolverlo en binario, por supuesto que se pueden agregar validaciones, de hecho hay que agregar validaciones para asegurarnos que el usuario ingrese un número, pero ese no es el objetivo de este post.
import java.io.BufferedReader; import java.io.InputStreamReader; class binario { public static void main(String[] args) { InputStreamReader isr = new InputStreamReader(System.in); BufferedReader rdr = new BufferedReader(isr); System.out.print("Ingrese un número entero: "); String buffer = "0"; try { buffer = rdr.readLine(); } catch(java.io.IOException e) // Es obligatorio manejar la IOException, si se omite no compila { System.out.println(e); } int dec = Integer.parseInt(buffer); System.out.print("El valor binario correspondiente es: "); if(dec == 0) System.out.println(dec); // Cero en cualquier base es cero else System.out.println(obtenerBinario(dec)); // llamamos a la func. recursiva } static String aux = ""; // variable auxiliar utilizada para almacenar el resto de cada división static String obtenerBinario(int decimal) { if(decimal == 1) // Límite de la recursividad return Integer.toString(decimal) + aux; // Devolvemos 1 y los restos anteriores else { aux = aux + Integer.toString(decimal % 2); //guardamos el resto en la variable auxiliar return obtenerBinario(decimal / 2); // hacemos el llamado recursivo con el resultado de la división } } }
Además del algoritmo para convertir los números, vale la pena ver la forma en que se lee la entrada estándar, utilizando un BufferedReader, pero eso lo veremos con mayor profundidad en otro post.

Septiembre 25, 2008 10:39hs
¿Es cosa mía o el límite de recursividad debería ser “
decimal <= 1“? En caso contrario, un número no lo muestra nunca.Octubre 3, 2008 10:31hs
exelente manito todo bien…….
Octubre 8, 2008 13:11hs
Esto está super interesante.Aunque no me guste la matematica pero bueno tengo que estudiar Gracias x la información
Octubre 8, 2008 20:51hs
@Rossina: A veces tenemos que aprender cosas que no nos gustan para poder dominar otras que si…
Octubre 25, 2008 13:34hs
Está mal, porque los restos tienen que ser ordenados al revés, es decir, debería de ser:
else{
aux = Integer.toString(decimal % 2) + aux;
return obtenerBinario(decimal / 2);
}
Octubre 27, 2008 20:41hs
[comentario editado por utilizar palabras fuera de lugar]
solo manda las exception a todo lo que da
Noviembre 1, 2008 15:21hs
@aldo: a mi me funciona bien, creo que tendrías que hacer un debug para ver que es lo que ocurre, o al menos escribe en un comentario los mensajes que te tira al compilar.
Por favor, no utilices el vocabulario del comentario anterior, hay otras formas de decir las cosas.
Noviembre 17, 2008 1:45hs
Hola el programa tiene un error con los numeros 5 y 6, arroja los resultados alrevez
Noviembre 17, 2008 1:55hs
Ya arregle tu programa, el error esta aqui:
aux = aux + Integer.toString(decimal % 2);
deberia ser asi:
aux = Integer.toString(decimal % 2)+ aux;
Saludos…
Noviembre 17, 2008 17:52hs
@Santiago y @Markos: gracias!! Confieso que no hice mucho testing en este ejemplo.