自己写的,先整数转二进制,再切片二进制转16进制
class Solution: def toHex(self, num: int) -> str: # 处理特殊情况:当 num 为 0 时,直接返回 '0' if num == 0: return '0' # 定义十六进制字母的映射关系 my_dict = {10:'a', 11:'b', 12:'c', 13:'d', 14:'e', 15:'f'} res = '' # 初始化结果字符串 if num >= 0: # 处理非负数的情况 # 将整数转换为对应的二进制字符串 bia_temp = self.posnumTobi(num) i = 0 # 每次处理四位二进制数,共八组 while i < 8: bia_internal = bia_temp[4*i : 4*(i+1)] # 切片操作提取四位二进制数 i += 1 # 将四位二进制数转换为十进制数 deci_internal = self.biToDecimal(bia_internal) # 如果十进制数小于等于9,则直接将其加入结果字符串中 if deci_internal <= 9: res = res + str(deci_internal) # 否则,使用映射关系获取十六进制字母,并加入结果字符串中 else: res = res + my_dict[deci_internal] elif num < 0: # 处理负数的情况 # 将负数转换为对应的补码表示的二进制字符串 bia_temp = self.negnumTobi(num) i = 0 while i < 8: bia_internal = bia_temp[4 * i : 4 * (i + 1)] # 切片操作提取四位二进制数 i += 1 # 将四位二进制数转换为十进制数 deci_internal = self.biToDecimal(bia_internal) # 如果十进制数小于等于9,则直接将其加入结果字符串中 if deci_internal <= 9: res = res + str(deci_internal) # 否则,使用映射关系获取十六进制字母,并加入结果字符串中 else: res = res + my_dict[deci_internal] # 删除结果字符串前面多余的零 res = res.lstrip('0') return res # 将非负整数转换为32位的二进制字符串 def posnumTobi(self, num): binary = "" while num > 0: binary = str(num % 2) + binary num //= 2 add_length = 32 - len(binary) add_char = '0' binary = add_char * add_length + binary return binary # 将负整数转换为32位的二进制补码字符串 def negnumTobi(self, num): num = abs(num) temp = self.posnumTobi(num) # 绝对值的二进制 binary = "".join('1' if x == '0' else '0' for x in temp) res = bin(int(binary, 2) + 1)[2:] return res # 将二进制字符串转换为十进制数 def biToDecimal(self, bi_str): decimal = int(bi_str, 2) return decimal
标签:十六进制,转换,binary,二进制,self,leedcode,add,num,internal From: https://www.cnblogs.com/yyyjw/p/18153200