方法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));
}
}
} 


京公网安备 11010502036488号