1253. 将数字转换为16进制
给定一个整数,写一个函数将其转换为16进制。对于负整数,需要使用二进制补码。
样例
样例1
输入:26
输出:"1a"
样例2
输入:-1
输出:"ffffffff"
注意事项
-
16进制的所有字母(a-f)必须为小写。
-
16进制字符串不能包含额外的前导0。如果数字为零,将它表示为单个字符'0';否则,16进制数的第一个字符不能为'0'。
-
给定数字保证在32位有符号整数的范围内。
-
你不能使用任何库中的函数,从而直接将给定数字转换为16进制。
public class Solution {
/**
* @param num: an integer
* @return: convert the integer to hexadecimal
*/
public String toHex(int num) {
// 这个小套路很可爱
char[] arr = new char[] {'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
String r = "";
// 正数负数分别处理
if (num >= 0) {
while (num > 0) {
r = arr[num % 16] + r;
num /= 16;
}
} else {
num = Math.abs(num);
// 这就是变反加1中的1
int carry = 1;
while (num > 0) {
int d = (num) % 16;
// 变反加carry,要mod16是因为可能值为16
d = (15 - d + carry) % 16;
r = arr[d] + r;
// 变反加carry如果为16,那么需要进位
carry = (15 - d + carry) / 16;
num /= 16;
}
while (r.length() < 8) {
r = 'f' + r;
}
}
return r;
}
}