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.
Example 1:
Input: 26 Output: "1a"
Example 2:
Input: -1 Output: "ffffffff"
先转换成二进制,然后把二进制按照4位一组进行转换。
class Solution {
public:
string toHex(int num) {
if(!num) return "0";
bool isminus = false;
if(num < 0){
num = -num;
isminus = true;
}
string hex = "0123456789abcdef";
int i;
int count = 0;
int sum = 0;
int tmp;
string res;
string res2;
int inc = 1;
for(i = 0; i <= 32; i ++){
if(count == 4){
count = 0;
if(isminus){
sum += inc;
if(sum == 16){
inc = 1;
sum = 0;
}else inc = 0;
}
res += hex[sum];
sum = 0;
}
if(i == 32) break;
tmp = num & 1;
if(isminus) tmp = !tmp;
num = num >> 1;
sum += tmp * pow(2, count ++);
}
reverse(res.begin(), res.end());
for(i = 0; i < res.size(); i ++){
if(res[i] != '0') break;
}
for(; i < res.size(); i ++){
res2 += res[i];
}
return res2;
}
};