leedcode-数字转换为十六进制数

自己写的,先整数转二进制,再切片二进制转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

 

posted @ 2024-04-23 16:40  Junior_bond  阅读(2)  评论(0编辑  收藏  举报