Python實現"數字轉換為十六進位制"的兩種方法
給定一個整數,寫一個演算法將它轉換為16進位制,對於負數,可以使用two’s complement方法
注意:
16進位制(a-f)只包括小寫字母
十六進位制字串中不能包含多餘的前導零。如果要轉化的數為0,那麼以單個字元'0'
來表示;對於其他情況,十六進位制字串中的第一個字元將不會是0字元。
給定的數確保在32位有符號整數範圍內。
不能使用任何由庫提供的將數字直接轉換或格式化為十六進位制的方法。
Example 1:
Input: 26 Output: "1a"
Example 2:
Input: -1 Output: "ffffffff"
1:自然數轉16進位制的方法和轉二進位制一樣.負數則先取反、再轉31位二進位制、再反碼、再反碼+1、再加上符號位(此時32位)、最後再轉16進位制
def toHex(self, num):
"""
:type num: int
:rtype: str
"""
chaDic = {10: 'a', 11: 'b', 12: 'c', 13: 'd', 14: 'e', 15: 'f'}
if num >= 0:
hexStr = ""
while num >= 16:
rest = num % 16
hexStr = chaDic.get(rest, str(rest)) + hexStr
num //= 16
hexStr = chaDic.get(num, str(num)) + hexStr
return hexStr
else:
if num == -2147483648: #特殊情況,負數最大值
return "80000000"
num = -num #負數取反
bitList = [0] * 31
tail = 30
while num >= 2: #數字轉二進位制
rest = num % 2
bitList[tail] = rest
tail -= 1
num //= 2
bitList[tail] = num
for i in range(31): # 反碼
bitList[i] = 1 if bitList[i] == 0 else 0
tail = 30
add = 1
while add + bitList[tail] == 2: #反碼加1
bitList[tail] = 0
tail -= 1
bitList[tail] = 1
bitList = [1] + bitList #新增負號
print bitList
hexStr = ""
for i in range(0, 32, 4): #二進位制轉16進位制
add = 0
for j in range(0, 4):
add += bitList[i + j] * 2 ** (3 - j)
hexStr += chaDic.get(add, str(add))
return hexStr
2:如果輸入整數是負數,則執行num = num + 2**23,然後統一進行轉16進位制處理(參考他人程式碼)
def toHex(self, num):
"""
:type num: int
:rtype: str
"""
chaDic = {10: 'a', 11: 'b', 12: 'c', 13: 'd', 14: 'e', 15: 'f'}
hexStr = ""
if num < 0:
num = num + 2**32
while num >= 16:
digit = num % 16
hexStr = chaDic.get(digit, str(digit)) + hexStr
num //= 16
hexStr = chaDic.get(num, str(num)) + hexStr
return hexStr
演算法題來:https://leetcode-cn.com/problems/convert-a-number-to-hexadecimal/description/
相關文章
- leedcode-數字轉換為十六進位制數
- 進位制數轉換方法(八/十六/十)
- 牛客網測試題 把十六進位制數字轉換為十進位制數字
- 遞迴函式實現十進位制正整數轉換為二進位制,八進位制,十六進位制遞迴函式
- Qt進位制轉換(十進位制轉十六進位制)QT
- Go語言實現十進位制轉換成二、八、十六進位制Go
- 進位制之間的轉換之“十六進位制 轉 十進位制 轉 二進位制 方案”
- 二進位制,八進位制,十進位制,十六進位制的相互轉換
- java中二進位制、八進位制、十進位制、十六進位制的轉換Java
- 二進位制,八進位制,十進位制,十六進位制之間的轉換
- 一看就懂二進位制、八進位制、十六進位制數轉換十進位制
- iOS 常用RGB十六進位制顏色轉換方法iOS
- jQuery顏色值轉換為十六進位制形式jQuery
- 十進位制轉十六進位制
- 整數轉化成八進位制、十六進位制、二進位制,以及轉回
- 【進位制轉換】二進位制、十六進位制、十進位制、八進位制對應關係
- JAVA 二進位制,八進位制,十六進位制,十進位制間進行相互轉換Java
- JavaScript rgb與十六進位制格式轉換JavaScript
- 計算機基礎進位制轉換(二進位制、八進位制、十進位制、十六進位制)計算機
- 十進位制轉換任意進位制--鏈棧實現
- JavaScript中的多種進位制與進位制轉換JavaScript
- 僅做筆記用:base64字串轉換為十六進位制形式表示的二進位制資料筆記字串
- 羅馬數字轉換成十進位制
- JavaScript十進位制轉換為二進位制JavaScript
- [計算機基礎] 計算機進位制轉換:二進位制、八進位制、十進位制、十六進位制計算機
- 教你如何進行數倉字串、二進位制、十六進位制互轉字串
- 口算 16 進位制轉換 10 進位制,但只適合兩位的 16 進位制
- C++實現進位制轉換工具C++
- 二進位制、十進位制與十六進位制相互轉化
- C++資料格式化5 - uint轉換成十六進位制字串&二進位制的data列印成十六進位制字串C++UI字串
- C++實現任意進位制的相互轉換C++
- 八進位制,十六進位制和浮點數
- 進位制的轉換
- Python處理十六進位制與二進位制轉換的問題——binascii自帶庫PythonASCII
- 進位制轉換
- [顏色進位制轉換]js實現rgb和hex的相互轉換JS
- Python 十進位制轉換為二進位制 高位補零Python
- WebSocket系列之JavaScript數字資料如何轉換為二進位制資料WebJavaScript