mirror of
https://github.com/ShusenTang/LeetCode.git
synced 2024-09-02 14:20:01 +00:00
Create 405. Convert a Number to Hexadecimal.md
This commit is contained in:
parent
629900731c
commit
6576474ecd
53
405. Convert a Number to Hexadecimal.md
Normal file
53
405. Convert a Number to Hexadecimal.md
Normal file
@ -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;
|
||||
}
|
||||
};
|
||||
```
|
Loading…
Reference in New Issue
Block a user