描述
写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。
数据范围:保证结果在 1≤n≤231−1 1≤n≤231−1
输入描述:
输入一个十六进制的数值字符串。
输出描述:
输出该数值的十进制字符串。不同组的测试用例用\n隔开。
示例1
输入:0xAA
输出:170
代码
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static int stringMapInt(char c){ //匹配非十进制字符对应value
switch(c){
case 'A': return 10;
case 'B': return 11;
case 'C': return 12;
case 'D': return 13;
case 'E': return 14;
case 'F': return 15;
}
return 0;
}
public static int stringToInt(String str){ //16进制字符串转10进制整数
int trueValue = 0;
str = str.substring(2); //去掉前面的十六进制标识符号
for (int i = 0; i < str.length(); i++) {
int v = 0;
char c = str.charAt(i); //获取每一位字符
if('0'<=c && c<='9'){ //判断是否在字符‘0’~‘9’之间
v = Integer.valueOf(c)-48; //将字符值装换为整数值,但是这里会转换为ascii码值,所以要减去‘0’对应的ascii值48
}else {
v = stringMapInt(c); //匹配十进制数
}
trueValue += v*Math.pow(16,str.length()-i-1); //根据截取到的每一位进行计算与之对应权值并与前面计算结果相加
}
return trueValue;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNext()) { // 注意 while 处理多个 case
String str = in.next();
int v = stringToInt(str);
System.out.println(v);
}
}
}