目录
问题描述
输入描述:
输出描述:
示例
解释
思路
代码实现
问题描述
写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。
输入描述:
输入一个十六进制的数值字符串
输出描述:
输出该数值的十进制字符串。不同组的测试用例用\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 处理多个 caseMap<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);}}