LeetCode 405: Convert a Number to Hexadecimal
题目描述
给定一个整数,编写一个算法将其转换为十六进制。对于负整数,使用二进制补码表示方法。
注意:
- 十六进制(a-f)中的所有字母都必须小写。
- 十六进制字符串不得包含额外的前导0串。如果数字为零,则用单个零字符表示'0';否则,十六进制字符串中的第一个字符将不是零字符。
- 保证给定的数字适合32位有符号整数的范围。
- 您不得使用库提供的任何将数字直接转换/格式化为十六进制的方法。
解题思路
十进制转十六进制可利用每四位二进制对应一位十六进制的机制进行转化,每次取得num的二进制低四位然后通过一个十六进制查找表转化为对应的十六进制形式即可。
AC代码
class Solution1 {
public:
string toHex(int num) {
if (num == 0)
return "0";
//定义十六进制映射表
char map[26] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e','f' };
string res;
while (num && res.length() < 8) //第二个条件保证不超过32位
{
//取num的低四位
res = map[num & 0xf] + res;
//经过验证,对负数同样适用!!!
num >>= 4; //这个地方舍弃低四位,注意容易写成num>>4,这就不对了!!!
}
return res;
}
};