405.数字を16進数に変換する(Python)

1841 ワード

タイトル
難易度:★☆☆☆☆タイプ:数学
整数を指定し、アルゴリズムを記述してこの数を16進数に変換します.負の整数については,通常,符号化演算法を用いる.
に注意
16進数のすべてのアルファベット(a-f)は小文字でなければなりません.16進数文字列に余分な先頭ゼロを含めることはできません.変換する数が0の場合、単一の文字'0'で表されます.その他の場合、16進数文字列の最初の文字は0文字ではありません.与えられた数は32ビットの符号付き整数の範囲内であることを保証する.ライブラリから提供される数値を直接16進数に変換またはフォーマットする方法は使用できません.

例1:入力:26出力:「1 a」
例2:入力:-1出力:「ffffffff」
に答える
これはコンピュータの基礎問題で、私たちはコンピュータのデータの記憶と表現方式に対して一定の理解が必要です.コンピュータの中で、整形変数の正数の補符号は自分で、負数の補符号は記号ビットを除いて、各位は逆を取って、それから全体+1で、そのため私達は区別しなければなりません:
  • 正数を入力し、経典数制を変換し、循環によって16に余剰を取って結果を得た.
  • はゼロを入力し、ゼロを返します.
  • 負数を入力するには、まず数字を符号化形式に変換し、正数で数値変換する必要があります.

  • ここでは10進数と16進数の変換辞書を構築しました
    {0: '0',
     1: '1',
     2: '2',
     3: '3',
     4: '4',
     5: '5',
     6: '6',
     7: '7',
     8: '8',
     9: '9',
     10: 'a',
     11: 'b',
     12: 'c',
     13: 'd',
     14: 'e',
     15: 'f'}
    

    エンコーディングプロセスは次のとおりです.
    class Solution(object):
        def toHex(self, num):
            """
            :type num: int
            :rtype: str
            """
            
            #                
            dec2hex = {**{i: str(i) for i in range(0, 10)}, **{i: chr(87+i) for i in range(10, 16)}}    
            
            #       ,        ,     +1
            if num < 0:
                num = int(''.join([str(1 - int(i)) for i in list(bin(-num)[2:].zfill(32))]), base=2)+1
            
            #      
            elif num == 0:
                return '0'
            
            #       
            res = ''
            while num:
                r, num = num % 16, num // 16    # num  16      
                res = dec2hex[r] + res          #            16   ,        
    
            return res                          #       
    

    質問やアドバイスがあれば、コメントエリアへようこそ~