正数的16进制很好计算。
负数的16进制通过补码运算
该题中负数对应的补码为:pow(2,32) -abs(num1); num1<0;
需要注意的是pow(2,32)次方已经超过了int的范围。
代码:class Solution {
public:
char arr[16]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
string toHex(int num) {
long long num1 = (long long)num;
if(num1 == 0){
return "0";
}
if(num1 < 0){
num1 = pow(2,32) -abs(num1);//计算得到负数的补码
}
string s;
while(num1){ //进制转换
int t = num1%16;
s.push_back(arr[t]);
num1 = num1/16;
}
for(int i=0;i
想一起在leetcode学习的小伙伴可以加我的QQ:2117588986



