十六进制转十进制数

/**
 * 十六转十进制(位权法)

 * 如:十六进制数: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 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    //取出十进制数的每一位
    String s=String.valueOf(str.charAt(i));
    //先判断输入的数是否符合十进制数
    if(!map.containsKey(s)){
    System.out.println("输入错误");
    return;
    }
    }
   
    for(int i=0;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);
}
}

你可能感兴趣的:(Java)