题目
题解
解法一:模拟
模拟起来很简单、但是负数需要处理、因为都是用补码表示、32位我们不妨直接用负数加上2^32,然后直接进行模拟即可。
class Solution {
public String toHex(int num) {
if (num == 0){return "0";}
long _num = num;
if (_num < 0){
_num += Math.pow(2,32);
}
StringBuilder res = new StringBuilder();
while (_num != 0){
long a = _num%16;
char c = a >= 10 ? (char)(a - 10 + 'a'):(char) ('0'+a);
res.append(c);
_num /= 16;
}
return res.reverse().toString();
}
}
解法二:位运算
二进制转为16进制就是每4位一算、想通这一点就直接进行模拟即可。
class Solution {
public String toHex(int num) {
if (num == 0){return "0";}
StringBuilder sb = new StringBuilder();
while (num != 0){
int temp = num & 15;
char c = temp >= 10 ? (char) (temp - 10 + 'a'):(char) (temp + '0');
sb.append(c);
num >>>= 4;
}
return sb.reverse().toString();
}
}