0405. 数字转换为十六进制数

0405. 数字转换为十六进制数 #

  • 标签:位运算、数学
  • 难度:简单

题目大意 #

给定一个整数 num

要求:编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用「补码运算」方法。

注意:

  • 十六进制中所有字母(a ~ f)都必须是小写。
  • 十六进制字符串中不能包含多余的前导零。如果要转化的数为 0,那么以单个字符 0 来表示
  • 对于其他情况,十六进制字符串中的第一个字符将不会是 0 字符。
  • 给定的数确保在 32 位有符号整数范围内。
  • 不能使用任何由库提供的将数字直接转换或格式化为十六进制的方法。

解题思路 #

主要是对不同情况的处理。

  • num 为 0 时,直接返回 0
  • num 为负数时,对负数进行「补码运算」,转换为对应的十进制正数(将其绝对值与 $2^{32} - 1$ 异或再加 1),然后执行和 nums 为正数一样的操作。
  • num 为正数时,将其对 16 取余,并转为对应的十六进制字符,并按位拼接到字符串中,再将 num 除以 16,继续对 16 取余,直到 num 变为为 0。
  • 最后将拼接好的字符串逆序返回就是答案。

代码 #

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
class Solution:
    def toHex(self, num: int) -> str:
        res = ''
        if num == 0:
            return '0'
        
        if num < 0:
            num = (abs(num) ^ (2 ** 32 - 1)) + 1
        
        while num:
            digit = num % 16
            if digit >= 10:
                digit = chr(ord('a') + digit - 10)
            else:
                digit = str(digit)
            res += digit
            num >>= 4
        return res[::-1]
本站总访问量  次  |  您是本站第  位访问者