Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

225
Vistas
¿Cómo convierto un argumento de línea de comando entero i en base k con bases hasta 16 usando las letras A a F para los dígitos 11-16, respectivamente?

Mensaje de pregunta: Modifique Binary para obtener un programa que tome dos argumentos de línea de comando enteros i y k y convierta i en base k. Suponga que i es un número entero en el tipo de datos largo de Java y que k es un número entero entre 2 y 16. Para bases mayores que 10, use las letras de la A a la F para representar los dígitos 11 a 16, respectivamente.

Logré convertir decimales a base 2-10 con éxito, pero parece que no puedo convertir decimales con la inclusión de los caracteres A a F que representan los dígitos 11 a 16, respectivamente.

No quiero usar matrices o listas. Entiendo que mi declaración de cambio carece de funcionalidad que resolvería mi problema, pero no estoy seguro de cómo mejorarlo. Estoy tratando de resolver el problema usando una declaración de cambio.

En el código, i representa un número entero para convertir a base k. k representa una base que puede ser 2-16.

 public class BaseConversion { public static void main(String[] args) { int i = Integer.parseInt(args[0]); int k = Integer.parseInt(args[1]); int power = 1; while (power <= i/k) { power *= k; } // Now power is the largest power of k <= i. if (k <= 10) { while (power > 0) { int digit = i / power; System.out.print(digit); i -= digit * power; power /= k; } } else if (k > 10) { switch (k) { case 11: System.out.println('A'); break; case 12: System.out.println('B'); break; case 13: System.out.println('C'); break; case 14: System.out.println('D'); break; case 15: System.out.println('E'); break; case 16: System.out.println('F'); break; } } } }
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Si necesita convertir un número entero (que es base 10) a cualquier otra base usando una declaración de cambio único, puede usar algo como esto:

 int i = //take from CLI int k = //take from CLI int num = i; //copy so we still have the original input //we need a string to represent anything but base-10 integers StringBuilder sb = new StringBuilder(); //decompose the input while( num > 0 ) { //extract the last digit int digit = num % k; //map the digit to a character - note: this is NOT k but the digit we extracted from the input switch(digit) { case 0,1,2,3,4,5,6,7,8,9: sb.append(digit); break; case 10: sb.append("A"); break; case 11: sb.append("B"); break; case 12: sb.append("C"); break; case 13: sb.append("D"); break; case 14: sb.append("E"); break; case 15: sb.append("F"); break; } //reduce the magnitude of the number by 1, ie divide by the base num /= k; } //we extracted the digits from the back so we need to reverse the string for proper left-to-right output String result = sb.reverse().toString();

Esto debería ayudarte a empezar. Tenga en cuenta que carece de un par de comprobaciones, por ejemplo, si k está en el rango [2,16]. También funciona con números positivos hasta ahora, pero la entrada negativa podría manejarse fácilmente multiplicando el número con -1 y agregando el signo al búfer de cadena antes de la conversión.

over 4 years ago · Santiago Trujillo Denunciar

0

Hay varios problemas en el código presentado:

  • los valores negativos son ignorados
  • los dígitos en la declaración de switch deben desplazarse hacia abajo en 1: 10 -> a , 11 -> b , .. 15 -> f
  • falta la conversión a la cadena, el código está imprimiendo dígitos uno por uno

Por lo tanto, se debe usar un StringBuilder para acumular el resultado. Si la entrada es negativa, se debe agregar el signo menos y el signo se invierte, luego los dígitos se calculan utilizando módulo por k y se insertan en el resultado en orden inverso.

 private static String convert(long n, int k) { assert(2 <= k && k <= 16); StringBuilder sb = new StringBuilder(); int p = 0; if (n < 0) { sb.append('-'); n *= -1; p = 1; } while (n > 0) { int digit = (int) (n % k); n /= k; if (digit < 10) { sb.insert(p, digit); } else { sb.insert(p, switch(digit) { case 10 -> 'a'; case 11 -> 'b'; case 12 -> 'c'; case 13 -> 'd'; case 14 -> 'e'; default -> 'f'; // the only remaining option }); } } return sb.toString(); }

De manera similar, el resultado puede recopilarse en un String en lugar de StringBuilder . Sin embargo, este enfoque generalmente no se recomienda (concatenación de cadenas en un bucle):

 private static String convert(long n, int k) { String s = ""; String sign = ""; if (n < 0) { sign = "-"; n *= -1; } while(n > 0) { int digit = (int) (n % k); n /= k; if (digit < 10) { s = digit + s; } else { s = switch(digit) { case 10 -> 'a'; case 11 -> 'b'; case 12 -> 'c'; case 13 -> 'd'; case 14 -> 'e'; default -> 'f'; } + s; } } return sign + s; }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda