405数字を16進数に変換
2103 ワード
質問:
整数を指定し、アルゴリズムを記述してこの数を16進数に変換します.負の整数については,通常,符号化演算法を用いる.
注意: 16進数のすべてのアルファベット(a-f)は小文字でなければならない. の16進数文字列には、余分なプリアンブルゼロは含まれません.変換する数が0の場合、単一の文字'0'で表されます.その他の場合、16進数文字列の最初の文字は0文字ではありません. で与えられた数は、32ビットの符号付き整数の範囲内であることを保証する. では、ライブラリによって提供される数値を16進数に直接変換またはフォーマットする方法は使用できません.
ソース:力ボタン(LeetCode)リンク:https://leetcode-cn.com/problems/convert-a-number-to-hexadecimal著作権はインターネットの所有に帰属する.商業転載は公式の授権に連絡してください.非商業転載は出典を明記してください.
考え方:16の整備と取余
実行時間:36 ms
メモリ消費量:13.8 MB
整数を指定し、アルゴリズムを記述してこの数を16進数に変換します.負の整数については,通常,符号化演算法を用いる.
注意:
ソース:力ボタン(LeetCode)リンク:https://leetcode-cn.com/problems/convert-a-number-to-hexadecimal著作権はインターネットの所有に帰属する.商業転載は公式の授権に連絡してください.非商業転載は出典を明記してください.
考え方:16の整備と取余
class Solution:
code = [str(i) for i in range(10)]+['a', 'b', 'c', 'd', 'e', 'f']
def toHex(self, num: int) -> str:
code_index = dict([(self.code[i], i) for i in range(16)])
code_str = dict([(i, self.code[i]) for i in range(16)])
L = 8
sign = 1
string = ['0' for i in range(8)]
if num < 0:
sign = -1
num = -num
for i in range(L):
string[L-i-1] = code_str[num % 16]
num = num // 16
if num == 0:
break
#print(string)
if sign == -1:
l = len(string)
s = 1
string[0] = '8'
for i in range(L):
item = string[L-i-1]
new_index = 15 - code_index[item] + s
s = new_index // 16
if L-i-1 == 0:
if new_index + 8 == 16:
string[L-i-1] = '8'
else:
string[L-i-1] = code_str[(new_index + 8) % 16]
else:
string[L-i-1] = code_str[new_index % 16]
#print(string)
result = ''
t = 0
for s in string:
if s == '0' and t == 0:
continue
result = result + s
t = 1
if result == '':
result = '0'
return result
実行時間:36 ms
メモリ消費量:13.8 MB