描述:
输入一个整数,将其转化为16进制。若为负数,则取它的补码进行运算。
输入输出样例
样例1
输入: 26
输出: 1a
样例2
输入: -1
输出: ffffffff
解题思路
将这个数对16求余,之后除以16,依次从低位转换。
note:负数的补码处理可以采用
unsigned int x = num
和x /= 16
处理。 也可以采用num = ~(-num)+1
加上x >> 4
处理,int 是32位的,每次移动 4 位,一共可以移动 8 次。
代码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17class Solution {
public:
string toHex(int num) {
if (num == 0) { return "0"; }
unsigned int x = num;
//int x = num > 0 ? num : ~(-num) + 1;
string res = "";
do {
int ret = x % 16;
x /= 16;
if (ret < 10) { res = to_string(ret) + res; }
else { res = char('a'+ret%10)+res; }
} while (x);
return res;
}
};
参考资料
原题