## 题目描述

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"``````

## 解法一

### 思路

``````26 -> 11010 -> 1a
115 -> 1110011 -> 73
-1 -> 11111111111111111111111111111111 -> ffffffff``````

### Python

``````class Solution(object):
def toHex(self, num):
"""
:type num: int
:rtype: str
"""
if num == 0:
return '0'
symbols = '0123456789abcdef'
result = ''
while num:
value = num & 0xf
result += symbols[value]
num = num >> 4 if num > 0 else (num % 0x100000000) >> 4
return result[::-1]``````

### Java

``````public class Solution {
public String toHex(int num) {
if (num == 0) {
return "0";
}
String symbols = "0123456789abcdef";
StringBuilder result = new StringBuilder();
while (num != 0) {
int value = num & 0xf;
result.append(symbols.charAt(value));
num >>>= 4;
}
return result.reverse().toString();
}
}``````

### C++

``````class Solution {
public:
string toHex(int num) {
if (num == 0) {
return "0";
}
string symbols = "0123456789abcdef";
string result = "";
while (num) {
int value = num & 0xf;
result += symbols[value];
num = (int)((unsigned int) num >> 4);
}
reverse(result.rbegin(), result.rend());
return result;
}
};``````