问题描述:
Given an integer, write an algorithm to convert it to hexadecimal. For negative integer, two’s complement method is used.
Note:
- All letters in hexadecimal (
a-f
) must be in lowercase. - The hexadecimal string must not contain extra leading
0
s. If the number is zero, it is represented by a single zero character'0'
; otherwise, the first character in the hexadecimal string will not be the zero character. - The given number is guaranteed to fit within the range of a 32-bit signed integer.
- You must not use any method provided by the library which converts/formats the number to hex directly.
用移位操作将数的每一位取出保存在bool数组里面,再按每四位为一个单元的顺序重新组织十六进制数即可。
代码:
#include<cmath>
class Solution {
public:
string toHex(int num) {
char codeT[] = {'0', '1', '2', '3', '4','5',
'6','7','8','9','a','b','c','d','e','f'
};
if (num == 0) return string("0");
//bool sign = (num > 0 ? true : false);
bool bits[32];
for(int i = 31; i >= 0; --i){
bits[31 - i] = num & (1 << i);
}
string res("00000000");
for(int i = 0; i < 8; ++i){
int tmp = 0;
for(int j = 0; j < 4; ++j){
tmp = (tmp << 1) + (int)(bits[i * 4 + j]);
}
res[i] = codeT[tmp];
}
for(int i = 0; i < 8; ++i){
if(res[i] != '0'){
return std::string(res.begin() + i, res.end());
}
}
}
};