题目描述 :
- 数字转换为十六进制数
给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。
注意:
十六进制中所有字母(a-f)都必须是小写。
十六进制字符串中不能包含多余的前导零。如果要转化的数为0,那么以单个字符'0'来表示;对于其他情况,十六进制字符串中的第一个字符将不会是0字符。
给定的数确保在32位有符号整数范围内。
不能使用任何由库提供的将数字直接转换或格式化为十六进制的方法。
示例 1:
输入:
26
输出:
“1a”
示例 2:
输入:
-1
输出:
“ffffffff”
题解一 :
思路 :
无脑 switch - case ,需要注意的是防止超范围 , 用 long 去存 num
代码 :
class Solution {
public String toHex(int num) {
if(num == 0){
return "0";
}
long num1 = num < 0 ? demo(num) : num ;
// int 范围: -2147483648~2147483647
// 2147483647(7FFFFFFF)
StringBuilder stringBuilder = new StringBuilder();
while (num1 > 0){
switch ((int) (num1 % 16)){
case 0:
stringBuilder.append('0');
break;
case 1:
stringBuilder.append('1');
break;
case 2:
stringBuilder.append('2');
break;
case 3:
stringBuilder.append('3');
break;
case 4:
stringBuilder.append('4');
break;
case 5:
stringBuilder.append('5');
break;
case 6:
stringBuilder.append('6');
break;
case 7:
stringBuilder.append('7');
break;
case 8:
stringBuilder.append('8');
break;
case 9:
stringBuilder.append('9');
break;
case 10:
stringBuilder.append('a');
break;
case 11:
stringBuilder.append('b');
break;
case 12:
stringBuilder.append('c');
break;
case 13:
stringBuilder.append('d');
break;
case 14:
stringBuilder.append('e');
break;
case 15:
stringBuilder.append('f');
break;
}
num1 /= 16;
}
return stringBuilder.reverse().toString();
}
public long demo(int num){
return (long) (num + Math.pow(2,32));
}
}
运行截图 :

题解二 :
思路 :
把 switch 中的情况用 char[] 替换
代码 :
```class Solution {
public String toHex(int num) {
if(num == 0){
return "0";
}
long num1 = num < 0 ? demo(num) : num ;
StringBuilder stringBuilder = new StringBuilder();
char[] chars = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
while (num1 > 0){
stringBuilder.append(chars[(int)(num1 % 16)]);
num1 /= 16;
}
return stringBuilder.reverse().toString();
}
public long demo(int num){
return (long) (num + Math.pow(2,32));
}
}
运行截图 :

版权声明:本文为qq_60717329原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。