链接:https://leetcode-cn.com/problems/base-7/description/
中文题目:
给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。
英文题目:
Given an integer, write an algorithm to convert it to hexadecimal. For negative integer, two’s complement method is used.
示例 1:
十六进制中所有字母(a-f)都必须是小写。
十六进制字符串中不能包含多余的前导零。如果要转化的数为0,那么以单个字符'0'来表示;对于其他情况,十六进制字符串中的第一个字符将不会是0字符。
给定的数确保在32位有符号整数范围内。
不能使用任何由库提供的将数字直接转换或格式化为十六进制的方法。
思路:
不同于7进制,出现了英文字母。
使用map简单记录
并用x & 1... = x的位运算技巧快速取余
由于是补码,所以使用无符号右移除16
题解:
class Solution {
public String toHex(int num) {
// 0特殊,出现string为空的情况
if (num == 0) {
return "0";
}
char[] map = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
StringBuilder sb = new StringBuilder();
// 这里不能用大于号防止出现负数不进行补码了
while (num != 0) {
// x & 1... = x 相当于取余16
sb.append(map[num & 0b1111]);
// 补码的形式采用无符号右移,16为2的4次方移动4个
num >>>= 4;
}
return sb.reverse().toString();
}
}