高效的十进制与18进制的转换

首先初始化三个参数,map用来存放10-17的数据,,sb用来显示最后的18进制数据,list用来存放10进制转为18进制后的每一位。

//用来存放词典
public static final Map<Integer, String> map=new HashMap<Integer, String>();
//18进制数据
public static StringBuffer sb=new StringBuffer("");
//用来存放18进制数据的每一位
public static List<Integer> list=new ArrayList<Integer>();

//自动加载词典
static{
map.put(10, "A");
map.put(11, "B");
map.put(12, "C");
map.put(13, "D");
map.put(14, "E");
map.put(15, "F");
map.put(16, "G");
map.put(17, "H");

}



接下来就是核心的转换代码


/**将十进制数字转十八进制数字。
*/
private  static void get18(int num){
while(num>0){
int yu=num%18;
num/=18;
//把余数存入list
list.add(yu);

}

}

此段代码的主要思路就是将十进制数对18取整(即除以18)后循环取余,最后将余数保存下来即可。


接下来是对余数的后续处理:


//生成18进制数字
private static void to18(){

for (int i = list.size()-1; i >=0; i--) {
if(map.containsKey(list.get(i))){
sb.append(map.get(list.get(i)));
}
else{
sb.append(list.get(i));
}
}

}


将list中的余数与map中的匹配,若大于10的则用英文字母A-H表示,否则就用数字0-9表示。

这里list下标从最大开始递减是因为要将得到的余数进行倒序排列才能得到相应的18进制数。


下面是相应的测试代码:

//测试
public static void main(String[] args) {

get18(5400);
to18();
//System.out.println(list);
System.out.println(sb);

}


结果是GC0.


其实只要理解了十进制转换的思想,十进制转换任何进制都是相应的套路。





  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值