题意
输入一个字符串(16进制数) ( 8 位)
输出一个十进制数 ( 要用long 由于Max(abs(INT)) = 2147483648 -(E)> 2^31 -(16)> 7F_FFF_FFF , long -> 2^63 -> 7FF_FFF_FFF_FFF_FFF)
代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
char[] HexAlphabet = new char[16];
char[] A_F_Alphabet = new char[6];
for (int i = 0; i < A_F_Alphabet.length; i++) {
A_F_Alphabet[i] = (char)((int)'A' + i);
}
for (int i = 0; i < HexAlphabet.length; i++) {
if( i <= 9)
HexAlphabet[i] = (char)((int)'0' + i);
else
HexAlphabet[i] = A_F_Alphabet[ i%10 ];
}
Scanner keyin = new Scanner(System.in);
char[] hex_input;
String str_in = keyin.nextLine();
hex_input = str_in.toCharArray();
long digit_power = 1;
long result = 0;
for (int i = str_in.length() - 1; i >= 0; i--) {
result += (long)(binarySearch(HexAlphabet,hex_input[i])*digit_power);
digit_power *= 16;
}
System.out.println(result);
}
public static int binarySearch(char[] array,char target){
int low = 0,high = array.length - 1 ,mid;
do{
mid = (low + high)/2;
if( target > array[mid] ){
low = mid + 1;
}
else if( target < array[mid] ){
high = mid - 1;
}
else
return mid;
}while(low <= high);
return -1;
}
}
Summary
1.算清楚输入和输出范围,防止溢出
2.思路
i) 建立HexAlphabet对映表0 <-> 15 -> '0' + '9' <-> 'A' <-> 'F' 即 下标与16进制字符一一对映 && (int)‘9’ < (int)'A'
ii)binarySearch + HexAlphabet + digit_power (为每一位上的权值,初始为1,随字符遍历 digit_power *= 16) -> result : long += binarySearch(…)
iii)输出result