Questions d'examen pratique de base décimal à hexadécimal
Description du problème
Le nombre hexadécimal est une représentation d'entier souvent utilisée dans la conception de programmes. Il a 16 symboles de 0,1,2,3,4,5,6,7,8,9, A, B, C, D, E, F , représentant les nombres décimaux de 0 à 15 . La méthode de comptage hexadécimal est hexadécimal 1 complet , donc le nombre décimal 16 est 10 en hexadécimal et le nombre décimal 17 est 11 en hexadécimal, et ainsi de suite, 30 décimal est en hexadécimal Le système est 1E.
Étant donné un entier non négatif, exprimez-le sous forme hexadécimale.
Description du format
Format d'entrée:
L'entrée contient un entier non négatif a, qui représente le nombre à convertir. 0 <= a <= 2147483647
Format de sortie:
Sortie de la représentation hexadécimale de cet entier
Cas de test
Exemple d'entrée:
30
Exemple de sortie:
1E
Analyse de cas de test
Entrez le nombre décimal représenté par la chaîne | Binaire | Hexadécimal | |
---|---|---|---|
Cas de test 1 | 0 | 0000 | 0 |
Cas de test 2 | 30 | 00011110 | 1E |
Cas de test 3 | 456 | 1 1100 1000 | 1C8 |
Cas de test 4 | 78945 | 1 0011 0100 0110 0001 | 1 3461 |
...... | ...... | ...... | ...... |
Pensée des questions
Ici, j'ai principalement utilisé les méthodes suivantes:
Premièrement: la classe Long est utilisée pour éviter les débordements.
Deuxièmement: utilisez String toUpperCase (locale) pour mettre en majuscule tous les caractères de sortie de cette chaîne de caractères en utilisant les règles données.
Troisièmement: statique long parseLong (String s, int radix)
analyse le paramètre de chaîne en un long signé dans la base spécifiée par le deuxième paramètre.
Quatrièmement: static String toBinaryString (long i) renvoie la représentation sous forme de chaîne du paramètre long sous la forme d'un entier non signé en base 2.
Cinquième: static Long valueOf (String s, int radix) renvoie un
objet Long, qui enregistre la valeur de la String String spécifiée et l'analyse avec la base donnée par le deuxième paramètre.
Les connaissances ci-dessus sont effectuées à l'aide de l'API Java. Je vous suggère de vérifier l'API Java lorsque vous étudiez. Voici l'API que j'utilise, j'espère que cela vous sera utile.
Lien disque réseau Baidu: https://pan.baidu.com/s/1fuzj93-nleSeH6dViQJszw
Code d'extraction: rr7r
La procédure est la suivante
Le premier programme, sur le système de la Blue Bridge Cup, n'a donné que 45 points, Gu n'est pas encore parfait et doit continuer à réfléchir.
code montrer comme ci-dessous:
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;
}
}
Après mon analyse, la raison est que la sortie par défaut de la console est constituée de lettres minuscules, une erreur sera donc signalée et Gu ne peut obtenir que 45 points.
Mauvaise analyse de programme
Dans le code ci-dessus, j'ai rarement ajouté une méthode pour convertir les lettres minuscules produites par la console en majuscules, j'ai donc fait une erreur.
Le point le plus important est: le code n'est pas assez concis, la robustesse est médiocre, le code est relativement redondant, il n'est pas recommandé de l'utiliser, vous pouvez vous y référer.
Source d'inspiration pour modifier le code
Le code modifié (correct) est le suivant:
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));
}
}
Dans ce code, par rapport au code ci-dessus, j'ai seulement ajouté une méthode ** toUpperCase () ** qui convertit les lettres minuscules en lettres majuscules.
Peut apprendre des autres blogs, très simple
Éclaircissement
Faites plus de pratique, lisez plus, apprenez les structures de données et les algorithmes, et soyez capable d'écrire très bien et parfait le code.
Vous avez également besoin d'une compréhension de base de l'utilisation de certaines classes de base. Par exemple , la différence entre Integer et Long
Doit apprendre à convertir entre les bases
Méthode de conversion de base de base
Doit être prudent