LeetCode-405 數(shù)字轉(zhuǎn)換為十六進(jìn)制

題目描述

給定一個(gè)整數(shù)未斑,編寫一個(gè)算法將這個(gè)數(shù)轉(zhuǎn)換為十六進(jìn)制數(shù)牲蜀。對(duì)于負(fù)整數(shù)看蚜,我們通常使用 補(bǔ)碼運(yùn)算 方法检诗。

注意:

  1. 十六進(jìn)制中所有字母(a-f)都必須是小寫。
  2. 十六進(jìn)制字符串中不能包含多余的前導(dǎo)零恬偷。如果要轉(zhuǎn)化的數(shù)為0悍手,那么以單個(gè)字符'0'來表示;對(duì)于其他情況袍患,十六進(jìn)制字符串中的第一個(gè)字符將不會(huì)是0字符坦康。
  3. 給定的數(shù)確保在32位有符號(hào)整數(shù)范圍內(nèi)。
  4. 不能使用任何由庫提供的將數(shù)字直接轉(zhuǎn)換或格式化為十六進(jìn)制的方法诡延。

    示例 1:
輸入:
26

輸出:
"1a"

示例 2:

輸入:
-1

輸出:
"ffffffff"

解題思路

首先要知道16進(jìn)制數(shù)在計(jì)算機(jī)中是怎么表示的滞欠,由于對(duì)于16進(jìn)制一個(gè)有16個(gè)數(shù)(0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f)所以我們只需要使用4位 2^4=16剛好可以表示16個(gè)數(shù),所以計(jì)算機(jī)在內(nèi)部是用4位來表示16進(jìn)制的0000表示0,0001表示1.....1111表示f肆良。
所以題目給我們一個(gè)int型的數(shù)字num,一個(gè)int= 4字節(jié) = 32位仑撞,這個(gè)32位數(shù)字可以被分隔成8個(gè)4位數(shù)赤兴,所以我們只需要從頭到尾每4位每4的的遍歷,每遍歷一個(gè)4位就將其轉(zhuǎn)化為16進(jìn)制的數(shù)即可隧哮。有人可能會(huì)問為什么這樣可以,其實(shí)這樣我們是做了兩個(gè)步驟座舍,先轉(zhuǎn)化為2進(jìn)制(由于計(jì)算機(jī)中所有東西本身就是2進(jìn)制存儲(chǔ)的沮翔,所以我們可以直接得到該數(shù)字的2進(jìn)制),再轉(zhuǎn)化為16進(jìn)制曲秉,比如對(duì)于26 ->二進(jìn)制為00011010(前面省略了24個(gè)0)所以每4位遍歷就變成了0001,1010對(duì)于0001 對(duì)應(yīng)16進(jìn)制中的1,1010對(duì)應(yīng)16進(jìn)制中的a所以結(jié)果就是為1a.所以對(duì)于此題我們只需要從尾部開始用位運(yùn)算取出每一個(gè)4位采蚀,再轉(zhuǎn)化為16進(jìn)制即可只需要注意前面為0的16進(jìn)制應(yīng)該刪除即可。
我們首先需要設(shè)一個(gè)數(shù)字calc = 0xf也就是右邊4位為1其余均為0承二,此時(shí)我們把數(shù)字num與之進(jìn)行與運(yùn)算就可以取出榆鼠,num右邊4位的值,然后再把calc向左邊移動(dòng)4位就變成了11110000(前面省略24個(gè)0)此時(shí)在與之相與就可以得到num中右邊8位的值亥鸠,此時(shí)還需要把這個(gè)值向右移動(dòng)4位妆够,因?yàn)檫@樣是的到了第2個(gè)4位值,然后再次重復(fù)此步驟即可负蚊。

代碼實(shí)現(xiàn)

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;

class Solution {
public:
    const char map[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8',
                            '9', 'a', 'b', 'c', 'd', 'e', 'f'};
    string toHex(int num) {
        if (num == 0) return "0";
        string res;
        unsigned int n = num;
        unsigned int calc = 0xf;
        unsigned int temp = 0xf;

        int trans = 0;
        for (int i = 0; i < 8; i++) {
            temp = num&calc;
            temp >>= trans;
            res += map[temp];
            calc <<= 4;
            trans += 4;
        }

        for (int i = res.size()-1; i >= 0; i--) {
            if (res[i] == '0') {
                res.pop_back();
            } else {
                reverse(res.begin(), res.end());
                return res;
            }
        }
        return nullptr;

    }
};
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末神妹,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子家妆,更是在濱河造成了極大的恐慌鸵荠,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件伤极,死亡現(xiàn)場(chǎng)離奇詭異蛹找,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)哨坪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門庸疾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人齿税,你說我怎么就攤上這事彼硫。” “怎么了凌箕?”我有些...
    開封第一講書人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵拧篮,是天一觀的道長。 經(jīng)常有香客問我牵舱,道長串绩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任芜壁,我火速辦了婚禮礁凡,結(jié)果婚禮上高氮,老公的妹妹穿的比我還像新娘。我一直安慰自己顷牌,他們只是感情好剪芍,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著窟蓝,像睡著了一般罪裹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上运挫,一...
    開封第一講書人閱讀 51,737評(píng)論 1 305
  • 那天状共,我揣著相機(jī)與錄音,去河邊找鬼谁帕。 笑死峡继,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的匈挖。 我是一名探鬼主播碾牌,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼关划!你這毒婦竟也來了小染?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤裤翩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后调榄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體踊赠,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年每庆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了筐带。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡缤灵,死狀恐怖伦籍,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情腮出,我是刑警寧澤帖鸦,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站胚嘲,受9級(jí)特大地震影響作儿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜馋劈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一攻锰、第九天 我趴在偏房一處隱蔽的房頂上張望晾嘶。 院中可真熱鬧,春花似錦娶吞、人聲如沸垒迂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽娇斑。三九已至,卻和暖如春材部,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背唯竹。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來泰國打工乐导, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人浸颓。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓物臂,卻偏偏與公主長得像,于是被迫代替她去往敵國和親产上。 傳聞我的和親對(duì)象是個(gè)殘疾皇子棵磷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容