不知道数字怎么转化成字符串。难过
class Solution {
public:
string toHex(int num) {
if(num<10) return to_string(num);
if(10<=10<16) return to_string(97+num-10);
else if (num>16) return toHex(num/16)+to_string('a'+num%16-10);
}
};
后来发现可以用char,但是run可以 提交不行
class Solution {
public:
string toHex(int num) {
if(num<10) return to_string(num);
else if (num>16) return toHex(num/16)+char('a'+num%16-10);
}
};
思路就不对!!!!!!!!十六进制8(0-7)位 ffff ffff 化为二进制32位数。for循环
上述方法稍稍复杂一些,我们来看一种更简洁的方法,我们采取位操作的思路,每次取出最右边四位,如果其大于等于10,找到对应的字母加入结果,反之则将对应的数字加入结果,然后num像右平移四位,循环停止的条件是num为0,或者是已经循环了7次,参见代码如下:
解法二:
class Solution { public: string toHex(int num) { string res = ""; for (int i = 0; num && i < 8; ++i) { int t = num & 0xf; if (t >= 10) res = char('a' + t - 10) + res; else res = char('0' + t) + res; num >>= 4; } return res.empty() ? "0" : res; } };
下面这种写法更加简洁一些,虽然思路跟解法二并没有什么区别,但是我们把要转换的十六进制的数字字母都放在一个字符串中,按位置直接取就可以了,参见代码如下:
解法三:
class Solution { public: string toHex(int num) { string res = "", str = "0123456789abcdef"; int cnt = 0; while (num != 0 && cnt++ < 8) { res = str[(num & 0xf)] + res; num >>= 4; } return res.empty() ? "0" : res; } };