/**
* 十六转十进制(位权法)
* 如:十六进制数:6A,——-转换为十进制数是:6*161+(A换成10)100=96+1=97
十六进制数:FFF,——–转换为十进制数:15*162+15*161+15*160=4095
* @author kevin
*
*/
public class Conversion1 {
@SuppressWarnings(“resource”)
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
//使用双例集合,用作存储转换表
Map<String,Integer> map=new HashMap<String, Integer>();
//将十六进制的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);
}
}