405.数字を16進数-leetcodeに変換

1739 ワード

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

  :
"1a"

例2:
  :
-1

  :
"ffffffff"

この問題はずっと取って、シフトしているにほかならない.
temp & 0xf
temp = temp >> 4

しかしswiftは少し肯定的で、負数はシフトできません
だから方法を変えて、取和の数を移動するしかありません.
(temp & (0xf << count)) >> count
count = count + 4

そしてコードを書きます
class Solution {
    func toHex(_ num: Int) -> String {
        if num < 16 && num > -1 {
            return toString(num)
        }
        var res = ""

        var temp = num
        var count = 0
        while temp != 0 && count < 32{
            if temp < 0 {
                let str = toString((temp & (0xf << count)) >> count)
                count = count + 4
                res = str + res
            } else{
                let str = toString(temp & 0xf) 
                temp = temp >> 4
                res = str + res
            }
        }
        
        return res
    }
    
    func toString(_ num:Int) ->String {
        switch num {
            case 10:return "a"
            case 11:return "b"
            case 12:return "c"
            case 13:return "d"
            case 14:return "e"
            case 15:return "f"
            default:break
        }
        return "\(num)"
    }
}