10进制转换成7进制、16进制、26进制
都是num%x 余数表示转换以后的进制数;num更新成num/x
10进制转换成16进制有补码,难点
1.26进制
class Solution {
public String convertToTitle(int n) {
StringBuilder sb=new StringBuilder();
while(n!=0){
n--;
sb.append( (char) (n%26+'A'));
n=n/26;
}
return sb.reverse().toString();
}
}
2.7进制
class Solution {
/*10进制转换成别的进制,除以进制数,的余数的相反数就是索要转换的进制数*/
public String convertToBase7(int num) {
if(num==0){
return "0";
}
boolean isNegative=num<0;
if(isNegative){
num=-num;
}
StringBuilder sb=new StringBuilder();
while(num>0){
sb.append(num % 7);
num/=7;
}
String ret=sb.reverse().toString();
return isNegative?"-"+ret:ret;
}
}
3.16进制
class Solution {
/*
按位与来获取。既然是得到十六进制,那么每次与上0xF(二进制就是1111),
得到一个值,然后数字向右移动4位,这里需要注意的是数字是有符号的,
刚好可以利用Java提供的无符号移动>>>。完美!!!
*/
public String toHex(int num) {
if(num==0) return "0";
char[] map={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
StringBuilder sb=new StringBuilder();
while(num!=0){
sb.append(map[num & 0xF]);
num= (num>>>4);
}
return sb.reverse().toString();
}
}