leetcode_405

Convert a Number to Hexadecimal

题目戳这

题意

给一个十进制的数,输出它的十六进制的表示方法,负数的话则输出它的补码形式。

解法

主要是关注下负数的表示形式,这里有篇很好的文章解释了为什么负数的补码就是正数补码的取反加一,总的来说,减去一个数a,就等于加上2^n-a,其中n为a二进制的位数,所以这道题目当输入x小于0的时候,取它的2^n-x即可。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution(object):
str1 = ""
vc = ['a', 'b', 'c', 'd', 'e', 'f']
def transForm(self, num):
if num <= 0:
return
self.transForm(num // 16)
self.str1 += str(num%16) if num%16 < 10 else self.vc[num%16-10]
def toHex(self, num):
"""
:type num: int
:rtype: str
"""
bitLen = 32
if num == 0:
return '0'
if num < 0:
num = (1<<bitLen) + num
self.transForm(num)
return self.str1