问题描述:
Given an integer, write an algorithm to convert it to hexadecimal. For negative integer, two’s complement method is used.
Note:
- All letters in hexadecimal (
de >a-f de>) must be in lowercase. - The hexadecimal string must not contain extra leading
de >0 de>s. If the number is zero, it is represented by a single zero character de >'0' de>; otherwise, the first character in the hexadecimal string will not be the zero character. - The given number is guaranteed to fit within the range of a 32-bit signed integer.
- You must not use any method provided by the library which converts/formats the number to hex directly.
示例:
Example 1:
Input: 26 Output: "1a"
Example 2:
Input: -1 Output: "ffffffff"
问题分析:
只需要求解出每四位对应的16进制数即可,这里有个小技巧,在num移位过程中,注意保持num始终大于0.
过程详见代码:
class Solution {
public:
string toHex(int num) {
char hex[16] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
string res = "";
if(num == 0) return "0";
int bit4 = 15;
for(int i = 0; i < 8 && num; i++)
{
int temp = bit4 & num;
res.insert(res.begin(),hex[temp]);
num >>= 4;
}
return res;
}
};