diff --git a/405. Convert a Number to Hexadecimal.md b/405. Convert a Number to Hexadecimal.md new file mode 100644 index 0000000..1cc6b06 --- /dev/null +++ b/405. Convert a Number to Hexadecimal.md @@ -0,0 +1,53 @@ +# [405. Convert a Number to Hexadecimal](https://leetcode.com/problems/convert-a-number-to-hexadecimal/description/) +# 思路 +将用补码(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和mask`0x0000000f`进行按位与操作实现。 + +# C++ +## 思路一 +``` 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; + } +}; +``` +## 思路二 +``` c++ +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; + } +}; +```