问题描述
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。样例输入
FFFF
样例输出
65535
我的想法
建立一个char类型arr数组负责记录每个键入值,
新建一个int类型arr2数组存储转换后每位对应值。
再通过算法,计算即可!
例如:2AF5换算成10进制:
第0位: 5 * 16^0 = 5
第1位: F * 16^1 =15*16^1= 240
第2位: A * 16^2= 10* 16^2=2560
第3位: 2 * 16^3 = 8192
结果就是:5 * 16^0 + 15 * 16^1 + 10 * 16^2 + 2 * 16^3 = 10997
注意
保存所有值的数据类型不可为int类型,如果输入的是FFFFFFFF会超出int范围!
代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String num = sc.next();
char[]arr = num.toCharArray();
int[] arr2 = new int[arr.length];
for (int i=0;i<arr.length;i++) {
switch (arr[i]) {
case 'A':
arr2[i] = 10;
break;
case 'B':
arr2[i] = 11;
break;
case 'C':
arr2[i] = 12;
break;
case 'D':
arr2[i] = 13;
break;
case 'E':
arr2[i] = 14;
break;
case 'F':
arr2[i] = 15;
break;
default:
arr2[i] =arr[i]-48;
break;
}
}
long sum = 0 ;
for (int i = arr2.length-1; i >=0; i--) {
double k = Math.pow(16,arr2.length-i-1);
sum+=(arr2[i]*k);
}
System.out.println(sum);
}
}