Description
Given an integer, write an algorithm to convert it to hexadecimal. For negative integer, two’s complement method is used.
Note
1.All letters in hexadecimal (a-f) must be in lowercase
2.he hexadecimal string must not contain extra leading 0s. 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.
3.The given number is guaranteed to fit within the range of a 32-bit signed integer
4.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"
Solution 1(C++)
static int x=[](){std::ios::sync_with_stdio; cin.tie(NULL); return 0;}();
class Solution {
public:
string toHex(int num) {
string ans;
if(!num) return "0";
int count=0;
while(num && count<8){
int b=num & 15;
if(b>9){ans.push_back('a'+b-10);}
else ans.push_back('0'+b);
num >>= 4;
count++;
}
reverse(ans.begin(), ans.end());
return ans;
}
};
Solution 2(C++)
class Solution {
public:
string toHex(int num) {
if(num == 0)
return "0";
string hex = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
string ret="";
for(int i=0;i<8 && num!=0;i++)
{
int temp = num & 15;
ret+= hex[temp];
num >>= 4;
}
reverse(ret.begin(),ret.end());
return ret;
}
};
算法分析
要注意如果是负数,左移左边会自动补0,所以这里要限制循环次数。
程序分析
略。