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