0405. 数字转换为十六进制数 #
- 标签:位运算、数学
- 难度:简单
题目大意 #
给定一个整数 num
。
要求:编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用「补码运算」方法。
注意:
- 十六进制中所有字母(
a
~f
)都必须是小写。 - 十六进制字符串中不能包含多余的前导零。如果要转化的数为
0
,那么以单个字符0
来表示 - 对于其他情况,十六进制字符串中的第一个字符将不会是
0
字符。 - 给定的数确保在
32
位有符号整数范围内。 - 不能使用任何由库提供的将数字直接转换或格式化为十六进制的方法。
解题思路 #
主要是对不同情况的处理。
- 当
num
为 0 时,直接返回0
。 - 当
num
为负数时,对负数进行「补码运算」,转换为对应的十进制正数(将其绝对值与 $2^{32} - 1$ 异或再加 1),然后执行和nums
为正数一样的操作。 - 当
num
为正数时,将其对 16 取余,并转为对应的十六进制字符,并按位拼接到字符串中,再将num
除以 16,继续对 16 取余,直到num
变为为 0。 - 最后将拼接好的字符串逆序返回就是答案。
代码 #
|
|