Saludos y felices fiestas.
Quiero compartir un código que hice ayer por la noche porque estaba aburrido y me gusta estudiar números binarios. Hice un convertidor de números decimales a números binarios en java. Me gustó mucho la manera con que lo hice porque da exactamente el número de bits que le corresponde a cada número a través de una lista simple. Esta aplicación se puede hacer de muchas formas, solo he hecho esta y se que la manera más sencilla es con esta estructura dinámica. El resto fue con propiedades matemáticas y un método sencillo para transformar decimales a binario.
A continuación, les comparto el código fuente de cada clase.
CLASE NODO
public class Nodo {
private int _data;
private Nodo _prox;
public Nodo(int _data)
{
this._data = _data;
this._prox = null;
}
public int getData() {
return _data;
}
public void setData(int _data) {
this._data = _data;
}
public Nodo getProx() {
return _prox;
}
public void setProx(Nodo _prox) {
this._prox = _prox;
}
public void Mostrar()
{
System.out.print(_data);
}
}
CLASE LISTA SIMPLE
public class ListaSimple {
private Nodo _cabeza;
public ListaSimple()
{
this._cabeza = null;
}
public Nodo getCabeza() {
return _cabeza;
}
public void setCabeza(Nodo _cabeza) {
this._cabeza = _cabeza;
}
public void InsertarPrimero(Nodo n)
{
if(_cabeza == null)
{
_cabeza = n;
}
else
{
n.setProx(_cabeza);
_cabeza = n;
}
}
public void InsertaFinal(Nodo n)
{
if(_cabeza == null)
{
_cabeza = n;
}
else
{
Nodo aux = _cabeza;
while(aux.getProx() != null)
{
aux = aux.getProx();
}
aux.setProx(n);
}
}
public Nodo EliminaPrimero()
{
if(_cabeza == null)
{
return null;
}
else if(_cabeza.getProx() == null)
{
Nodo aux = _cabeza;
_cabeza = null;
return aux;
}
else
{
Nodo aux = _cabeza;
_cabeza = aux.getProx();
aux.setProx(null);
return aux;
}
}
public void EliminarTodo()
{
int cont = 0;
Nodo aux = _cabeza;
while(aux != null)
{
cont++;
aux = aux.getProx();
}
for (int i = 0; i < cont; i++) {
this.EliminaPrimero();
}
}
public void Mostrar()
{
Nodo aux = _cabeza;
while(aux != null)
{
aux.Mostrar();
aux = aux.getProx();
}
}
}
CLASE APLICACIÓN BINARIO
public class Binario {
/**
* @param args the command line arguments
*/
public int ContarBits(int n ,Binario bin)
{
int x = 0;
for (int i = 1; i <= n; i++) {
if(bin.EsPotenciade2(i))
{
x++;
}
}
return x;
}
public void TransformarBinario(int n, Binario bin, ListaSimple ls)
{
int cont = bin.ContarBits(n, bin);
for (int i = 1; i <= cont; i++) {
if(n % 2 == 0)
{
ls.InsertarPrimero(new Nodo(0));
}
else
{
ls.InsertarPrimero(new Nodo(1));
}
n = n / 2;
}
}
public boolean EsPotenciade2(int n)
{
return ((Math.log(n) / Math.log(2)) % 1 == 0);
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
ListaSimple ls = new ListaSimple();
Binario bin = new Binario();
int x = 0;
int num = 0;
int rsp = 1;
while(rsp == 1)
{
System.out.println("Ingrese un numero");
num = sc.nextInt();
bin.ContarBits(num, bin);
bin.TransformarBinario(num, bin, ls);
ls.Mostrar();
System.out.println("\n Desea convertir otro numero decimal a binario ? si(1), no(0) \n");
//SE INICIALIZA OTRA VEZ PARA SER UTILIZADO NUEVAMENTE
num = 0;
ls.EliminarTodo();
rsp = sc.nextInt();
}
}
}
Eso fue todo. Espero que les haya gustado. Saludos otra vez y feliz año nuevo.
Lindo Codigo, se ve bueno, sigue creando cosas!!! un abrazo
nunca está de más un código así!
Se agradece SALUDOS!
Aqui te pongo mi código para pasar de decimal a binario:
public static void main (String [] args){
Scanner sc1 = new Scanner(System.in);
System.out.println("Welcome to Hu3c0 converter decimal a binario");
System.out.println("Introduzca un número entero");
int entradaUno=sc1.nextInt();
System.out.println(" El número que ha introducido es = "+ entradaUno+" En binario es igual a = "+ +Integer.toBinaryString(entradaUno));
}
Espero que te guste, luego también se puede hacer un código en el que vaya dividiendo el número entero por 2 y vaya cogiendo los restos de la división lo vas metiendo en un array una vez el entero no se pueda dividir más por el número dos.
Coges y vas leyendo desde el último número del array hasta cero, más o menos sería esto:
10 /2
0 5 /2
1 2 /2
0 1 <<<<<<<<coges desde el útlimo hacia arriba y sería el número 10 == a 1010 en binario
Espero que os haya gustado a mi es que me chiflan las matemáticas
para hacer lo contrario sería asi:
1 0 1 0
2 2 4 10
1 2 5 10<<<<<<<<<<Este es el número decimal del binario 1010