当前位置: 首页 > 后端技术 > Python

LeetCode405.ConvertaNumbertoHexadecimal

时间:2023-03-26 18:29:16 Python

Description给定一个整数,编写一个算法将其转换为十六进制。对于负整数,采用补码法。注意:十六进制(a-f)中的所有字母必须是小写。十六进制字符串不能包含额外的前导0。如果数字为零,则用单个零字符“0”表示;否则,十六进制字符串中的第一个字符将不是零字符。给定的数字保证在32位有符号整数的范围内。您不得使用库提供的任何直接将数字转换/格式化为十六进制的方法。示例1:输入:26输出:"1a"示例2:输入:-1输出:"ffffffff"描述给定一个整数,编写一个算法将这个数字转换为十六进制。对于负整数,我们通常使用补码运算法。注意:十六进制中的所有字母(a-f)必须小写。十六进制字符串中不能包含额外的前导零。如果要转换的数字是0,则用单个字符'0'表示;在其他情况下,十六进制字符串中的第一个字符不会是0字符。给定的数字保证在32位有符号整数的范围内。您不能使用库提供的任何方法将数字直接转换或格式化为十六进制。示例1:输入:26输出:"1a"示例2:输入:-1输出:"ffffffff"来源:LeetCode链接:https://leetcode-cn.com/probl...版权归Leetcode网络所有。商业转载请联系官方授权,非商业转载请注明出处。思路是将负数转化为补数:我们知道对于一个负数-a(a>0),将补数为a的二进制表示按位取反,然后加一;你为什么这么做?因为需要让负数的二进制表示和负数的绝对值的二进制表示相加为0;例如0b1,最高位为1,按位取反后(假设只有8位)为0b11111110,此时数加起来为0b1111111,此时此数加1,可以变为0,所以补码负数是这个数的绝对值+1的二进制补码;为了找到一个数num(num<0)我们记住要求的补码是x,那么x+(-num)=0,所以x=0-num,在32位表示中,0就是0xffffffff+1,负数化成补码后,对16取模,记余数;如此循环,直到商为0;#-*-coding:utf-8-*-#@Author:何瑞#@CreateDate:2019-09-1410:47:02#@LastModifiedby:HeRui#@LastModifiedtime:2019-09-1411:07:11class解决方案:deftoHex(self,num:int)->str:ifnum<0:num=0xffffffff+1+numtransfer="0123456789abcdef"res=[]whilenum:res.append(transfer[num%16])num>>=4return''.join(reversed(res))or'0'sourcecodefilehere.?