Preguntas de examen práctica básica decimal a hexadecimal

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.

Descarga de API

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.

Escritura 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

Supongo que te gusta

Origin blog.csdn.net/weixin_45619069/article/details/113086484
Recomendado
Clasificación