将一个10进制数除以18,得到的商再除以18,依次类推直到商等于1或0为止,倒序取得的余数即为18进制的结果。
同理转换为2进制。
如图:
实现代码如下:
public class cal4 {
//用来存放字典
private static Map<Integer, String> map = new HashMap<Integer, String>();
//用来存储余数
private static List<Integer> list = new LinkedList<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");
}
/**
* 转换18进制
* @param number
* @return
*/
public static List<Integer> to18(int number){
int yushu = number%18;
int shang = number/18;
list.add(yushu);
if (shang < 18) {
list.add(shang);
} else {
to18(shang);//递归
}
return list;
}
/**
* 打印结果
* @param list
* @return
*/
public static String getOut(List<Integer> list){
StringBuffer sb = new StringBuffer();
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));
}
}
return sb.toString();
}
//测试
public static void main(String[] args) {
System.out.println(getOut(to18(5400)));
}
}