HJ5 进制转换
描述
写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。
数据范围:保证结果在 1≤𝑛≤231−1 1≤n≤231−1
输入描述:
输入一个十六进制的数值字符串。
输出描述:
输出该数值的十进制字符串。不同组的测试用例用\n隔开。
示例:
输入:0xAA 输出:170
分析:
1.取字符串除0x/0X之外的字符串。
2.使用parseInt方法把字符串转换为数字。
3.打印数字。
代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str=sc.next();
String s=str.substring(2);
//System.out.println(s);
//把字符串转为数字
Integer num = Integer.parseInt(s,16);
//System.out.println(num);
if(num<1&&num>Integer.MAX_VALUE){
System.out.println("非法输入!");
return;
}else {
System.out.println(num);
}
}
}
大佬代码:
代码更简洁!
import java.io.*;
import java.util.*;
public class Main{
public static void main(String[] args) throws Exception{
Scanner sc = new Scanner(System.in);
while(sc.hasNextLine()){
String s = sc.nextLine();
System.out.println(Integer.parseInt(s.substring(2,s.length()),16));
}
}
}
使用Map集合存储十六进制的字符。
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import static javax.swing.UIManager.put;
public class Main {
private final static int BASE = 16;
private static Map<Character, Integer> map = new HashMap<Character, Integer>()
{{
put('0', 0);
put('1', 1);
put('2', 2);
put('3', 3);
put('4', 4);
put('5', 5);
put('6', 6);
put('7', 7);
put('8', 8);
put('9', 9);
put('A', 10);
put('B', 11);
put('C', 12);
put('D', 13);
put('E', 14);
put('F', 15);
put('a', 10);
put('b', 11);
put('c', 12);
put('d', 13);
put('e', 14);
put('f', 15);
}};
public static int getDecimal(String number) {
int res = 0;
for (char ch : number.toCharArray()) {
res = res * BASE + map.get(ch);
System.out.println("ch="+map.get(ch));
System.out.println("res="+res);
}
return res;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
String number = in.next();
int res = getDecimal(number.substring(2));
System.out.println(res);
}
}
}
使用十六进制的原理。
import java.util.Scanner;
import java.lang.Math;
public class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
while(in.hasNextLine()){
String s = in.nextLine(); //读入数字
int count = 0; //记录转换后的数字
for(int i=0; i < s.length()-2; i++){
//由于前面两位是'0x',故从第三位开始
char tc = s.charAt(i+2);
int t = 0; //记录字母转换成的数值
//将字母转换为数值
if(tc>='0' && tc<='9')
t = tc - '0';
//字母'A'/'a'~'F''f'对应数字10~15
else if(tc>='A' && tc<='F')
t = tc - 'A' + 10;
else if(tc>='a' && tc<='f')
t = tc - 'a' +10;
//计算加和
count += t * Math.pow(16, s.length()-i-3);
}
System.out.println(count);
}
}
}
使用Integer的valueOf方法。
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
while(in.hasNext()){
String str = in.nextLine();
String s1 = str.substring(2);
int a = Integer.valueOf(s1,16);
System.out.println(a);
}
}
}