目录
问题描述
写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。
输入描述:
输入一个十六进制的数值字符串
输出描述:
输出该数值的十进制字符串。不同组的测试用例用\n隔开。
示例
输入:0xAA
输出:170
解释
十六进制(Hexadecimal)是一种逢16进1的进位计数制,以0x开头,使用16个符号来表示数值。这些符号包括0到9的阿拉伯数字和A到F的字母(其中A代表10,B代表11,C代表12,D代表13,E代表14,F代表15)。
十六进制转十进制
确定每位的权重:
第0位的权重是 16^0=1。
第1位的权重是 16^1=16。
第2位的权重是 16^2=256。
依此类推,第n位的权重是 16^n
将上述步骤中计算得到的所有位的数值相加,得到的总和即为该十六进制数对应的十进制数值。
示例计算:10 * 16^1 + 10 * 16 ^ 0 = 170
思路
通过一个Map集合,将0到F作为key存入,value为对应的十进制数
通过循环,拿到输入的字符,取出十进制的数,进行十六进制转十进制的运算
代码实现
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) { // 注意 while 处理多个 case
Map<Character, Integer> map = new HashMap<>();
String s = in.nextLine();
map.put('0', 0);
map.put('1', 1);
map.put('2', 2);
map.put('3', 3);
map.put('4', 4);
map.put('5', 5);
map.put('6', 6);
map.put('7', 7);
map.put('8', 8);
map.put('9', 9);
map.put('A', 10);
map.put('B', 11);
map.put('C', 12);
map.put('D', 13);
map.put('E', 14);
map.put('F', 15);
map.put('G', 16);
int number = 0;
int pow = s.length() - 3; // 幂 ,用于十六转十进制计算
for (int i = 2; i < s.length(); i++) {
char c = s.charAt(i);
if (map.containsKey(c)) {
int num = map.get(c);
number += (int)(num * Math.pow(16, pow));
pow--;
}
}
System.out.print(number);
}
}