时间限制:1.0s 内存限制:512.0MB
问题描述
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535
注意:数据范围,中间的2的次方可能超过 int
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
String[] two = {
"0000", "0001", "0010", "0011",
"0100", "0101", "0110", "0111",
"1000", "1001", "1010", "1011",
"1100", "1101", "1110", "1111",
};
String str = cin.nextLine();
int len = str.length();
long ans = 0;
//转为二进制
//System.out.println(str + "str");
StringBuilder twostr = new StringBuilder();
for(int i = 0; i < len; i++) {
if(str.charAt(i) < 'A') {
twostr.append(two[str.charAt(i) - '0']);
}
else {
twostr.append(two[str.charAt(i) - 'A' + 10]);
}
}
//System.out.println(twostr);
//转为十进制
len = twostr.length();
long t = 1;
ans = 0;
for(int i = len - 1; i >= 0; i--) {
ans += (twostr.charAt(i) - '0') * t;
t = t * 2;
}
System.out.println(ans);
}
}