/**
* 十六转十进制(位权法)
* <p>
* 如:十六进制数:6A,-------转换为十进制数是:6 * 161 +(A换成10)100 = 96 + 1= 97
* <p>
* 十六进制数:FFF,--------转换为十进制数:15 * 162 + 15 * 161 + 15 * 160 = 4095
*
* @author star
*/
public class Conversion1 {
@SuppressWarnings("resource")
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 使用双例集合,用作存储转换表
Map<String, Integer> map = new HashMap<>();
// 将十六进制的16个字符(0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F)存入集合中
for (int i = 0; i <= 9; i++) {
map.put(String.valueOf(i), i);
}
// 十六进制A代表10,依次类推
map.put("A", 10);
map.put("B", 11);
map.put("C", 12);
map.put("D", 13);
map.put("E", 14);
map.put("F", 15);
// 十进制数
long dec = 0;
// 输入(8位的)十进制数
String str = scanner.next();
if (str.length() <= 8) {
for (int i = 0; i < str.length(); i++) {
//取出十进制数的每一位
String s = String.valueOf(str.charAt(i));
//先判断输入的数是否符合十进制数
if (!map.containsKey(s)) {
System.out.println("输入错误");
return;
}
}
for (int i = 0; i < str.length(); i++) {
String s = String.valueOf(str.charAt(i));
if (map.containsKey(s)) {
//转换为十进制数
dec += (map.get(s) * fac(str.length() - i - 1));
}
}
System.out.println(dec);
}
}
/**
* 计算16的n次幂
*
* @param n 次数
*/
public static long fac(int n) {
return n == 0 ? 1 : 16 * fac(n - 1);
}
}
还没有评论,来说两句吧...