解题思路:

  1. 16进制数的第0位的权值为16的0次方,第一位的权值为16的一次方,第2位的权值为16的2次方。
  2. 所以,在第N(N从0开始)位上,如果是数X表示的大小为X*16的N次方。
  3. 因此,将接收到的数据首先倒换位置,然后在从0位截取到倒数第2位,最后按照权位相加求和。
 
import java.io.*;
import java.util.Locale;

/**
 * @author Administrator
 */
public class Main {
    public static void main(String[] args) throws IOException {

        BufferedReader bf = new BufferedReader(new InputStreamReader((System.in)));
        String str = null;

        while ((str = bf.readLine()) != null) {
            int decimal = 0;
            StringBuffer reStr = new StringBuffer(str).reverse();
            String string = String.valueOf(reStr).substring(0, reStr.length() - 2).toUpperCase(Locale.ROOT);
            char[] charStr = string.toCharArray();
            for (int i = 0; i < charStr.length; i++) {
                switch (charStr[i]) {
                    case 'A':
                        decimal += 10 * Math.pow(16, i);
                        break;
                    case 'B':
                        decimal += 11 * Math.pow(16, i);
                        break;
                    case 'C':
                        decimal += 12 * Math.pow(16, i);
                        break;
                    case 'D':
                        decimal += 13 * Math.pow(16, i);
                        break;
                    case 'E':
                        decimal += 14 * Math.pow(16, i);
                        break;
                    case 'F':
                        decimal += 15 * Math.pow(16, i);
                        break;
                    default:
                        decimal += Integer.parseInt(String.valueOf(charStr[i])) * Math.pow(16, i);
                }
            }
            System.out.println(decimal);
        }


    }
}