Sep 25 2008
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.
}