Preguntas de examen práctica básica decimal a hexadecimal
Descripción del problema
El número hexadecimal es una representación de un entero que se utiliza a menudo en el diseño de programas. Tiene 16 símbolos de 0,1,2,3,4,5,6,7,8,9, A, B, C, D, E, F , que representan los números decimales del 0 al 15 . El método de conteo hexadecimal es hexadecimal completo 1 , por lo que el número decimal 16 es 10 en hexadecimal, y el decimal 17 es 11 en hexadecimal, y así sucesivamente, el decimal 30 está en hexadecimal El sistema es 1E.
Dado un número entero no negativo, expreselo en forma hexadecimal.
Descripción de formato
Formato de entrada:
La entrada contiene un entero no negativo a, que representa el número que se va a convertir. 0 <= a <= 2147483647
Formato de salida:
Salida de la representación hexadecimal de este entero
Caso de prueba
Entrada de muestra:
30
Salida de muestra:
1E
Análisis de casos de prueba
Ingrese el número decimal representado por la cadena | Binario | Hexadecimal | |
---|---|---|---|
Caso de prueba 1 | 0 | 0000 | 0 |
Caso de prueba 2 | 30 | 00011110 | 1E |
Caso de prueba 3 | 456 | 1 1100 1000 | 1C8 |
Caso de prueba 4 | 78945 | 1 0011 0100 0110 0001 | 1 3461 |
...... | ...... | ...... | ...... |
Pregunta pensando
Aquí utilicé principalmente los siguientes métodos:
Primero: la clase Long se utiliza para evitar el desbordamiento.
Segundo: use String toUpperCase (configuración regional) para poner en mayúscula todos los caracteres de salida en esta cadena de caracteres usando las reglas dadas.
Tercero: static long parseLong (String s, int radix)
analiza el parámetro de cadena en un long con signo en la base especificada por el segundo parámetro.
Cuarto: cadena estática toBinaryString (i larga) devuelve la representación de cadena del parámetro largo como un entero sin signo en base 2.
Quinto: static Long valueOf (String s, int radix) devuelve un
objeto Long, que guarda el valor de la String String especificada y lo analiza con la base dada por el segundo parámetro.
El conocimiento anterior se realiza con la ayuda de la API de Java. Te sugiero que consultes la API de Java cuando estudies. A continuación se muestra la API que utilizo, espero que te sea útil.
Enlace de disco de red de Baidu: https://pan.baidu.com/s/1fuzj93-nleSeH6dViQJszw
Código de extracción: rr7r
El procedimiento es el siguiente
El primer programa, en el sistema Blue Bridge Cup, solo dio 45 puntos. Gu no es perfecto todavía y necesita seguir pensando.
el código se muestra a continuación:
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
String line = input.next();
//System.out.println(tenToBinary(binToHex(line)));
System.out.println(tenToBinary(line));
System.out.println(binToHex(tenToBinary(line)));
}
//将十进制转换为二进制
public static String tenToBinary(String string){
return formatBinAddZero(Long.toBinaryString(Long.parseLong(string, 10)));
}
//将二进制转换为十六进制
public static String binToHex(String bin){
return Long.toHexString(Long.valueOf(bin, 2));
}
//将二进制的添加零情况
public static String formatBinAddZero(String string){
if(string.length() % 4 == 1){
string = "000" + string;
}
if(string.length() % 4 == 2){
string = "00" + string;
}
if(string.length() % 4 == 3){
string = "0" + string;
}
return string;
}
}
Después de mi análisis, la razón es que la salida predeterminada de la consola son letras minúsculas, por lo que se informará un error y Gu solo puede obtener 45 puntos.
Análisis de programa incorrecto
En el código anterior, rara vez agregué un método para convertir las letras minúsculas generadas por la consola en mayúsculas, así que cometí un error.
El punto más importante es: el código no es lo suficientemente conciso, la robustez es pobre, el código es relativamente redundante, no se recomienda su uso, puede consultarlo.
Fuente de inspiración para modificar el código
El código modificado (correcto) es el siguiente:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
String line = input.next();
//观察,输入的十进制字符串能否正确的转换为二进制
//System.out.println(tenToBinary(line));
System.out.println(binToHex(tenToBinary(line)).toUpperCase());
}
//将十进制转换为二进制
public static String tenToBinary(String string){
return formatBinAddZero(Long.toBinaryString(Long.parseLong(string, 10)));
}
//将二进制转换为十六进制
public static String binToHex(String bin){
return Long.toHexString(Long.valueOf(bin, 2));
}
}
En este código, en comparación con el código anterior, solo agregué un método ** toUpperCase () ** que convierte letras minúsculas en letras mayúsculas.
Puede aprender de otros blogs, muy simple.
Iluminación
Practique más, lea más, aprenda estructuras de datos y algoritmos, y sea capaz de escribir código muy bien y perfecto.
También necesita una comprensión básica del uso de algunas clases básicas. Por ejemplo , la diferencia entre Integer y Long
Debe aprender a convertir entre las bases.
Método de conversión básico básico
Debe tener cuidado