LeetCode 405. Convert a Number to Hexadecimal(十进制数转换为十六进制)
题目描述
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 (a-f
) must be in lowercase.
The hexadecimal string must not contain extra leading 0
s. If the number is zero, it is represented by a single zero character '0'
; 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"
解法一
思路
这题是要把十进制数转换为十六进制,并且对于负数是采用补码形式。
那么这题就直接是把数的二进制以十六进制的形式表示出来就好了。即:
26 -> 11010 -> 1a
115 -> 1110011 -> 73
-1 -> 11111111111111111111111111111111 -> ffffffff
即每次处理二进制数的最低4位,得到0-15
间的值映射到0123456789abcdef
中得到十六进制表示;再将此二进制数向右移动4位,循环处理,直到二进制数为0
。
Python
class Solution(object):
def toHex(self, num):
"""
:type num: int
:rtype: str
"""
if num == 0:
return '0'
symbols = '0123456789abcdef'
result = ''
while num:
value = num & 0xf
result += symbols[value]
num = num >> 4 if num > 0 else (num % 0x100000000) >> 4
return result[::-1]
Java
public class Solution {
public String toHex(int num) {
if (num == 0) {
return "0";
}
String symbols = "0123456789abcdef";
StringBuilder result = new StringBuilder();
while (num != 0) {
int value = num & 0xf;
result.append(symbols.charAt(value));
num >>>= 4;
}
return result.reverse().toString();
}
}
C++
class Solution {
public:
string toHex(int num) {
if (num == 0) {
return "0";
}
string symbols = "0123456789abcdef";
string result = "";
while (num) {
int value = num & 0xf;
result += symbols[value];
num = (int)((unsigned int) num >> 4);
}
reverse(result.rbegin(), result.rend());
return result;
}
};
关键是这一行:
int value = num & 0xf;实在理解不了这么做是什么意思