方法1:
/* * 题目分析: 进制转换 * 解题思路: 暴力...或者直接: Integer.parseInt(String s, int radix) * 注意事项: 话说十六进制怎么表示负数, 最高位值取1吗, 还是前置负号? * 提交失败: * 1. 答案全错了... 原因: 通过charAt()获取的结果直接转int, 其值实际是Ascii码, 如 '0' 实际值是 80 * 2. switch 没有处理 'F' */ import java.util.Scanner; import java.lang.Math; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) { String hex = sc.nextLine().substring(2); int len = hex.length(); int dec = 0; for (int i = len - 1, j = 0; i >= 0; i--, j++) { int tmpDec; switch (hex.charAt(i)) { case 'A': tmpDec = 10; break; case 'B': tmpDec = 11; break; case 'C': tmpDec = 12; break; case 'D': tmpDec = 13; break; case 'E': tmpDec = 14; break; case 'F': tmpDec = 15; break; default : // 通过charAt()获取的结果直接转int,其值实际是Ascii码, 如 '0' 实际值是 80 tmpDec = hex.charAt(i) - '0'; break; } dec += tmpDec * Math.pow(16, j); } System.out.println(dec); } } }
方法2:
/* * 题目分析: 进制转换 * 解题思路: 直接: parseInt(String s, int radix) */ import java.util.Scanner; import java.lang.Math; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) { String hex = sc.nextLine().substring(2); System.out.println(Integer.parseInt(hex, 16)); } } }