解题思路:
- 16进制数的第0位的权值为16的0次方,第一位的权值为16的一次方,第2位的权值为16的2次方。
- 所以,在第N(N从0开始)位上,如果是数X表示的大小为X*16的N次方。
- 因此,将接收到的数据首先倒换位置,然后在从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);
}
}
}