问题描述
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535
解法1: 直接调用java的进制转换的方法
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String hexStr = sc.next();
long tenNum = Long.parseLong(hexStr, 16);
System.out.println(tenNum);
}
}
解法2: 根据十六进制的十进制表示,用循环做加法
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String hexStr = sc.next();
char char_arr[] = hexStr.toCharArray();
int len = char_arr.length;
long sum = 0;
for (int i = 0; i < len; i++) {
long a = getTenNum(char_arr[i]);
long b = (long)Math.pow(16, len - i-1);
sum += a * b;
}
System.out.println(sum);
}
public static long getTenNum(char ch) {
int num = 0;
switch (ch) {
case '0':
num = 0;
break;
case '1':
num = 1;
break;
case '2':
num = 2;
break;
case '3':
num = 3;
break;
case '4':
num = 4;
break;
case '5':
num = 5;
break;
case '6':
num = 6;
break;
case '7':
num = 7;
break;
case '8':
num = 8;
break;
case '9':
num = 9;
break;
case 'A':
num = 10;
break;
case 'B':
num = 11;
break;
case 'C':
num = 12;
break;
case 'D':
num = 13;
break;
case 'E':
num = 14;
break;
case 'F':
num = 15;
break;
default:
break;
}
return num;
}
}