1.10进制转16进制
2591转化为16进制数:
... + x2*16^2 + x1*16^1 + x0*16^0 = 2591
同mod16得到:
x0 = 2591 % 16 = 15 ---> x0 = 15
同除以16:
... + x2 * 16^1 + x1*16^0 = 161
再次同mod16:
x1 = 1
同除以16:
... + x2 * 16^0 = 10
再次mod 16:
x2 = 10
除以16:
右边因式 = 0,计算结束
转化后数字为:A1F
2.16进制转10进制
16进制数A1F转化为10进制计算方式:
10*16^2 + 1*16^1 + 15*16^0 = 2560 + 16 + 15 = 2591
写代码过程中,从高位到低位,每两位都可以提取一个16计算,代码如下:
public int titleToNumber(String s) { int lineNum = 0; for(int i = 0;i < s.length();i++){ int num = s.charAt(i) - '0'; if(s.charAt(i) > '9'){ num = s.charAt(i) - 'A'+ 10; } lineNum = lineNum * 16 + num; } return lineNum; }
3.excel列名称计算(10进制转26进制,思想同1)
需注意,excel列名称计算,与普通的进制转化不相同,是从1开始的,并且,也不是满26进1,满26依然是26(Z),27则变为AA(依然是从1开始)
代码:
public String convertToTitle(int n) { StringBuilder strBuilder = new StringBuilder(); while(n != 0){ n--; int x = n % 26; strBuilder.insert(0,(char)('A' + x)); n = n / 26; } return strBuilder.toString(); }
4.10进制转化为7进制
类似16进制转化,代码如下
public String convertToBase7(int num) { boolean flag = num < 0 ? true : false; String result = ""; num = Math.abs(num); do{ result = num%7+""+ result; num = num/7; }while(num != 0); if(flag) result = "-" + result; return result; }