405. Convert a Number to Hexadecimal

不知道数字怎么转化成字符串。难过


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;
    }
};
复制代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值