LeetCode 405 關於負數轉化爲16進制

如果哪個地方寫的有錯誤,歡迎指出

題目

題目鏈接
給定一個整數,編寫一個算法將這個數轉換爲十六進制數。對於負整數,我們通常使用 補碼運算 方法。

注意:
  • 十六進制中所有字母(a-f)都必須是小寫。
  • 十六進制字符串中不能包含多餘的前導零。如果要轉化的數爲0,那麼以單個字符’0’來表示;對於其他情況,十六進制字符串中- 的第一個字符將不會是0字符。
  • 給定的數確保在32位有符號整數範圍內。
  • 不能使用任何由庫提供的將數字直接轉換或格式化爲十六進制的方法。

示例 1:
輸入:
26
輸出:
“1a”

示例 2:
輸入:
-1
輸出:
“ffffffff”

解法
  • 首先如果是一個負數,可以使用int 轉化爲unsigned int,把負數轉化爲其補碼的形式。代碼可以測試一下,把一個int型的變量a(值爲-1)轉化爲unsigned int值爲 4294967295
  • 賦個大佬的解釋給你 我是鏈接
#include<iostream>
using namespace std;
int main()
{
    int a = -1;
    unsigned int b = a;
    cout<<b<<endl;
    system("pause");
    return 0;
}
  • leetcode 上題目的代碼
string toHex(int num)
{
    string arr[17] = {"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"};
    unsigned int n = num;
    string res  = "";
    while(n){
        res = arr[n%16] + res;
        n = n / 16;
    }
    return res;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章