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-數字轉換為十六進位制數
- Facebook 面試題 | 將數字轉換為十六進位制面試題
- 十六進位制轉換為八進位制
- 十六進位制轉換為十進位制
- 進位制數轉換方法(八/十六/十)
- 【進位制轉換】十進位制與十六進位制相互轉換方法
- js將數字轉換為二進位制、十六進位制或者八進位制程式碼JS
- 遞迴函式實現十進位制正整數轉換為二進位制,八進位制,十六進位制遞迴函式
- JavaScript 二進位制數字轉換為十進位制JavaScript
- oracle 給的轉換函式實現 十六進位制---->十進位制Oracle函式
- Qt進位制轉換(十進位制轉十六進位制)QT
- (轉)【iOS 開發】二進位制、十進位制、十六進位制相互轉換的方法iOS
- 十六進位制數轉十進位制
- Go語言實現十進位制轉換成二、八、十六進位制Go
- 其他進位制的數字 轉換
- 二進位制,八進位制,十進位制,十六進位制的相互轉換
- js實現的十進位制和十六進位制相互轉換程式碼例項JS
- sql 數字轉換為16進位制數函式SQL函式
- 進位制之間的轉換之“十六進位制 轉 十進位制 轉 二進位制 方案”
- 一看就懂二進位制、八進位制、十六進位制數轉換十進位制
- java中二進位制、八進位制、十進位制、十六進位制的轉換Java
- 二進位制,八進位制,十進位制,十六進位制之間的轉換
- ORACLE使用函式對二進位制、十進位制、十六進位制數互相轉換Oracle函式
- 十進位制轉換為十六進位制和二進位制程式碼例項
- jQuery顏色值轉換為十六進位制形式jQuery
- javascript將數字轉換為十六進位制程式碼例項JavaScript
- 遞迴-進位制轉換器(十六進位制以內)遞迴
- Oracle中十進位制與十六進位制轉換程式Oracle
- python 數字 十六進位制 列印Python
- Python 進位制互相轉換(二進位制、十進位制和十六進位制)Python
- 大話二進位制,八進位制,十進位制,十六進位制之間的轉換
- javascript十進位制數字和二進位制相互轉換JavaScript
- 整數轉化成八進位制、十六進位制、二進位制,以及轉回
- 十進位制轉十六進位制
- 【轉帖】Oracle中的二進位制、八進位制、十進位制、十六進位制相互轉換函式Oracle函式
- 羅馬數字轉換成十進位制
- Oracle中的二進位制、八進位制、十進位制、十六進位制相互轉換函式Oracle函式
- JAVA 二進位制,八進位制,十六進位制,十進位制間進行相互轉換Java