2018-05-29 405. Convert a Number to Hexadecimal

題意:將一個(gè)十進(jìn)制數(shù)轉(zhuǎn)換為16進(jìn)制數(shù)。
解題思路:
方法一:常規(guī)方法,對(duì)該十進(jìn)制數(shù)判斷正負(fù),正數(shù)就是十進(jìn)制數(shù)直接轉(zhuǎn)化為十六進(jìn)制數(shù),負(fù)數(shù)就是先變?yōu)檎龜?shù)然后求補(bǔ)碼轉(zhuǎn)換為十六進(jìn)制數(shù)。
該方法比較麻煩。

class Solution {
public:
    string toHex(int num) {
        if(num == 0x80000000) return "80000000";
        if(num == 0) return "0";
        int flg = 0;
        if(num < 0) flg = -1;
        num = abs(num);
        string h_num;
        while(num){
            int m = num % 16;
            if(m < 10)
                h_num = char(m + '0') + h_num;
            else
                h_num = char(m - 10 + 'a') + h_num;
            num /= 16;
        }
        if(flg == -1){
            int i;
            for(i = 0; i < h_num.size(); i++){
                int m;
                if('0' <= h_num[i] && h_num[i] <= '9')
                    m = 15 - (h_num[i] - '0');
                else
                    m = 15 - (10 + (h_num[i] - 'a'));
                if(m < 10)
                    h_num[i] = char(m + '0');
                else
                    h_num[i] = char(m - 10 + 'a');
            }
            while(i < 8){
                h_num = "f" + h_num;
                i++;
            }
            h_num[7]++;
            if(h_num[7] == '9' + 1)
                h_num[7] = 'a';
            else if(h_num[7] == 'g'){
                int tmp = 1, i = 7;
                while(tmp){
                    h_num[i--] = '0';
                    h_num[i]++;
                    if(h_num[i] == '9' + 1)
                        h_num[i] = 'a';
                    else if(h_num[i] == 'g')
                        continue;
                    tmp = 0;
                }
            }
        }
        return h_num;
    }
};

方法二:對(duì)該十進(jìn)制數(shù)每四位對(duì)十六進(jìn)制數(shù)的f求與,這樣可以得到該數(shù)的低4位數(shù)的值,然后將該值轉(zhuǎn)換為十六進(jìn)制數(shù),然后將該數(shù)右移4位。由于對(duì)于正數(shù),右移時(shí)最高位補(bǔ)0,對(duì)于負(fù)數(shù)右移時(shí)最高位補(bǔ)1,所以要判斷右移的次數(shù),最多不能超過(guò)8次。

class Solution {
public:
    string toHex(int num) {
        if(num == 0) return "0";
        string HEX = "0123456789abcdef";
        string ans;
        int count = 0;
        while(num && count++ < 8){
            ans = HEX[num & 0xf] + ans;
            num >>= 4;
        }
        return ans;
    }
};
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容