Autor
|
Tema: [RETO ABIERTO] Cambio de base ~ (Leído 5,885 veces)
|
Dnk!
|
Reto abierto: # Se puede realizar en cualquier lenguaje. # Tipo de Reto: Ejercicio sencillo # Categoria: Abierto # Fecha de entrega: 04/11/2010 , empiezan votaciones el 04/11/2010 # Sources abiertos: Sí 1)Escriba un programa JAVA que lea del teclado un entero en base 10 y escriba la secuencia de caracteres que representa dicho número en la base especificada: Introduce un entero (base 10): 4833 Introduce una base: 25 El número leído en base 25 es:7I8 (es una i, no un uno)
2)Escriba un programa JAVA que lea del teclado un entero, indicando la base en la que está expresado y una secuencia de caracteres que represente un número en dicha base, y escriba su valor en base 10. Base: 25 Número en base 25:7I8 (es una i, no un uno) El número leído en base 10 es:4833
Nota: Hay 25 caracteres de la ‘A’ a la ‘Z’. Por lo tanto podemos representar números desde base 2 hasta base 36. Debes leer las secuencias hasta que encuentres un carácter no válido para la base introducida.
|
|
|
En línea
|
|
|
|
Shell Root
|
Apuesto mi laptop, a que no es un reto, sino una tarea.
|
|
|
En línea
|
Te vendería mi talento por poder dormir tranquilo.
|
|
|
Dnk!
|
Viendo que no se animan, no tengo mas remedio que dejar aqui la solucion, para las h4xoRs Desconfiados. Un gusto en compartirlo con vosotros: /* AUTOR: d3n3k4 (Dnk!) * FECHA: 30/NOV/2010 * DESCRIPCION: * - AnyDecimalToBaseN: Convierte un numero decimal a otro en Base N "2..36" * - AnyBaseNToDecimal: Convierte un numero en Base N "2..36" a otro decimal * USO: * String var = AnyDecimalToBaseN(334,2); * long var = AnyBaseNToDecimal("334",16); * NOTA: Este codigo es libre y puede ser usado,modificado... siempre y cuando se * mantenga los creditos y comentarios del autor. */ public class conversorNBases { public static String AnyDecimalToBaseN (long numero, int base ) { long potMax = 0,res = 0; while (numero >=Math. pow(base, potMax + 1)) potMax++; while (potMax >= 0) { res = numero /(long)Math. pow(base, potMax ); if (res > 9) resultado += (char)(res+55); else resultado += res; if (numero >= Math. pow(base, potMax )) numero = numero %(long)Math. pow(base, potMax ); potMax--; } return resultado; } public static long AnyBaseNToDecimal (String numero, int base ) { long resultado = 0; char[] V_numero = numero.toCharArray(); for (int i = 0; i < V_numero.length; i++) { resultado = resultado * base; resultado = resultado + Character. getNumericValue(V_numero [i ]); } return resultado; } }
xDnk!
|
|
|
En línea
|
|
|
|
Debci
Wiki
Desconectado
Mensajes: 2.021
Actualizate o muere!
|
Se agradece el aporte.
Saludos
|
|
|
En línea
|
|
|
|
ghastlyX
Ex-Staff
Desconectado
Mensajes: 1.900
|
El primero puede hacerse bastante más corto haciéndolo recursivamente. No lo probado, pero deberían funcionar las dos funciones. public class conversor { public static String decimalBase (long x, int base ) { if (x %base <= 9) res = new String(String. valueOf((char)(x %base + '0'))); else res = new String(String. valueOf((char)(x %base - 10 + 'A'))); if (x/base > 0) res = decimalBase(x/base, base).concat(res); return res; } public static long baseDecimal (String numero, long base ) { long res = 0; for (int i = 0; i < numero.length(); ++i) res = res *base + (long)Character. getNumericValue(numero. charAt(i )); return res; } }
Siento si hay algo del código que no sea necesario, como por ejemplo castings. Java no es el lenguaje que uso habitualmente. EDITO: No había visto lo de en cualquier lenguaje. Pongo la primera función en C++ de una forma más compacta. typedef long long ll; string dtoB(ll x, int b) { return ((x/b > 0)?dtoB(x/b, b):"") + char(x%b + (x%b < 10)*'0' + (x%b >= 10)*('A' - 10)); }
|
|
« Última modificación: 2 Diciembre 2010, 17:20 pm por ghastlyX »
|
En línea
|
|
|
|
Dnk!
|
ghastlyX: Estan muy bien tus codes, ahora cuando saque tiempo, los revisare, porque aun no los comprendo del todo. Gracias por aportar
|
|
|
En línea
|
|
|
|
|
|