/*** 十六转十进制(位权法)* <p>* 如:十六进制数:6A,-------转换为十进制数是:6 * 161 +(A换成10)100 = 96 + 1= 97* <p>* 十六进制数:FFF,--------转换为十进制数:15 * 162 + 15 * 161 + 15 * 160 = 4095** @author star*/
public class Conversion1 {@SuppressWarnings("resource")public static void main(String[] args) {Scanner scanner = new Scanner(System.in);// 使用双例集合,用作存储转换表Map<String, Integer> map = new HashMap<>();// 将十六进制的16个字符(0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F)存入集合中for (int i = 0; i <= 9; i++) {map.put(String.valueOf(i), i);}// 十六进制A代表10,依次类推map.put("A", 10);map.put("B", 11);map.put("C", 12);map.put("D", 13);map.put("E", 14);map.put("F", 15);// 十进制数long dec = 0;// 输入(8位的)十进制数String str = scanner.next();if (str.length() <= 8) {for (int i = 0; i < str.length(); i++) {//取出十进制数的每一位String s = String.valueOf(str.charAt(i));//先判断输入的数是否符合十进制数if (!map.containsKey(s)) {System.out.println("输入错误");return;}}for (int i = 0; i < str.length(); i++) {String s = String.valueOf(str.charAt(i));if (map.containsKey(s)) {//转换为十进制数dec += (map.get(s) * fac(str.length() - i - 1));}}System.out.println(dec);}}/*** 计算16的n次幂** @param n 次数*/public static long fac(int n) {return n == 0 ? 1 : 16 * fac(n - 1);}
}