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