1、描述
给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。
注意:
十六进制中所有字母(a-f)都必须是小写。
十六进制字符串中不能包含多余的前导零。如果要转化的数为0,那么以单个字符’0’来表示;对于其他情况,十六进制字符串中的第一个字符将不会是0字符。
给定的数确保在32位有符号整数范围内。
不能使用任何由库提供的将数字直接转换或格式化为十六进制的方法。
示例 1:
输入:
26
输出:
“1a”
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/convert-a-number-to-hexadecimal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2、关键字
进制转换,10进制转成16进制的数,可正可负
3、思路
先把int提升为long,
把负数先搞成正数,
4、notes
搞成map,从后往前,也可以直接转:当前位置,把之前的结果写在右边就行了
5、复杂度
时间:O(K),K等于8,,32位数的位,
空间:O(K)
6、code
class Solution {
public:
string toHex(int num) {
string res;
long N = num;
if(N==0) return "0";
unordered_map<int,char> mp;
mp = {
{0, '0'},
{1, '1'},
{2, '2'},
{3, '3'},
{4, '4'},
{5, '5'},
{6, '6'},
{7, '7'},
{8, '8'},
{9, '9'},
{10, 'a'},
{11, 'b'},
{12, 'c'},
{13, 'd'},
{14, 'e'},
{15, 'f'},
};
if(N < 0) N = N + 0x100000000; // 把负数转成正数
while(N > 0){
long lastDigit = N % 16;
N /= 16;
res = mp[lastDigit] + res; // 这里直接写答案,从右往左更新“位”
}
return res;
}
};