这题比较简单,不过要注意num为0的情况。
class Solution {
public:
string toHex(int num) {
string result;
unsigned int tmp_num = num;
if(!num)
return "0";
while(tmp_num)
{
char str[10];
int residual = tmp_num % 16;
tmp_num = tmp_num >> 4;
// cout << num << endl;
if(residual < 10)
{
char tmp = residual + '0';
result = tmp + result;
}
else
{
char tmp = residual - 10 + 'a';
result = tmp + result;
}
}
return result;
}
};
还有更高效的做法:这里要注意的一点就是对于有符号的数字的右移是算数右移,所以这里加入了一个计数器来计算负数的情况。
class Solution {
public:
string toHex(int num) {
string result;
if(!num)
return "0";
int count = 0;
while(num && count < 8)
{
char str[10];
int residual = num & 15;
num = num >> 4;
if(residual < 10)
{
char tmp = residual + '0';
result = tmp + result;
}
else
{
char tmp = residual - 10 + 'a';
result = tmp + result;
}
count++;
}
return result;
}
};