mirror of
https://github.com/ShusenTang/LeetCode.git
synced 2024-09-02 14:20:01 +00:00
1.6 KiB
1.6 KiB
405. Convert a Number to Hexadecimal
思路
将用补码(2's complement)表示的数转换成16进制数。
思路一
进制转换常规思路。
首先将补码表示的数看做是无符号的数,然后再用常规的不断除以16的方法转换进制。
例如将十进制数25转换成16进制:
25 / 16 = 1···9
1 / 16 = 0···1
所以结果就是19
思路二
由于2进制转16进制刚好是4位为一组,所以可考虑从低位起不断获取num的四位bit再将其转换成16进制。
例如将十进制数25转换成16进制:
25的32位二进制表示为
000..0011001
, 最低四位1001
的16进制表示为9,次第四位0001
的16进制表示为1,再高位就全是0了,所以结果就是19.
获得num的低四位可以通过num和mask0x0000000f
进行按位与操作实现。
C++
思路一
class Solution {
public:
string toHex(int num) {
if(num == 0) return "0";
string mp = "0123456789abcdef";
string res;
unsigned n = (unsigned)num;
while(n > 0){
res += mp[n % 16];
n /= 16;
}
reverse(res.begin(), res.end());
return res;
}
};
思路二
class Solution {
public:
string toHex(int num) {
if(num == 0) return "0";
string mp = "0123456789abcdef";
string res;
while(num != 0){
res += mp[0x0000000f & num];
num >>= 4;
}
reverse(res.begin(), res.end());
return res;
}
};