您的位置:首页 > 其它

十六进制转十进制数

2018-03-05 19:49 246 查看
/**
 * 十六转十进制(位权法)
 * 如:十六进制数: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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息