405. Convert a Number to Hexadecimal
leetcode easy
Task
Если задано целое число num, верните строку, представляющую его шестнадцатеричное представление. Для отрицательных целых чисел используется метод дополнения до двух. Все буквы в строке ответа должны быть строчными, и в ответе не должно быть никаких ведущих нулей, кроме самого нуля. Примечание: Вам не разрешается использовать какие-либо встроенные библиотечные методы для непосредственного решения этой задачи.
Пример:
Input: num = 26
Output: "1a"
C# solution
matched/originalpublic class Solution {
public string ToHex(int num) {
if (num == 0) return "0";
char[] hexChars = "0123456789abcdef".ToCharArray();
uint n = (uint)num;
StringBuilder result = new StringBuilder();
while (n > 0) {
result.Append(hexChars[n % 16]);
n /= 16;
}
char[] charArray = result.ToString().ToCharArray();
Array.Reverse(charArray);
return new string(charArray);
}
}C++ solution
auto-draft, review before submit#include <bits/stdc++.h>
using namespace std;
// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
public string ToHex(int num) {
if (num == 0) return "0";
char[] hexChars = "0123456789abcdef".ToCharArray();
uint n = (uint)num;
StringBuilder result = new StringBuilder();
while (n > 0) {
result.Append(hexChars[n % 16]);
n /= 16;
}
char[] charArray = result.ToString().ToCharArray();
Array.Reverse(charArray);
return new string(charArray);
}
}Java solution
matched/originalpublic class Solution {
public String toHex(int num) {
if (num == 0) return "0";
char[] hexChars = "0123456789abcdef".toCharArray();
long n = num;
if (num < 0) n += 1L << 32;
StringBuilder result = new StringBuilder();
while (n > 0) {
result.append(hexChars[(int)(n % 16)]);
n /= 16;
}
return result.reverse().toString();
}
}JavaScript solution
matched/originalfunction toHex(num) {
if (num === 0) return "0";
let hexChars = "0123456789abcdef";
if (num < 0) num += 2 ** 32;
let result = [];
while (num > 0) {
result.push(hexChars[num % 16]);
num = Math.floor(num / 16);
}
return result.reverse().join('');
}Python solution
matched/originaldef to_hex(num):
if num == 0:
return "0"
hex_chars = "0123456789abcdef"
if num < 0:
num += 2 ** 32
result = []
while num > 0:
result.append(hex_chars[num % 16])
num //= 16
return ''.join(result[::-1])Go solution
matched/originalpackage main
import (
"fmt"
"strings"
)
func toHex(num int) string {
if num == 0 {
return "0"
}
hexChars := "0123456789abcdef"
if num < 0 {
num += 1 << 32
}
result := []byte{}
for num > 0 {
result = append(result, hexChars[num%16])
num /= 16
}
for i, j := 0, len(result)-1; i < j; i, j = i+1, j-1 {
result[i], result[j] = result[j], result[i]
}
return string(result)
}
func main() {
fmt.Println(toHex(26))
fmt.Println(toHex(-1))
}Explanation
Algorithm
Определите, является ли число отрицательным. Если да, преобразуйте его в положительное число с помощью метода дополнения до двух. Для этого прибавьте к числу 2^32 и используйте битовую операцию И с маской 0xFFFFFFFF.
Создайте строку с шестнадцатеричными символами. Последовательно делите число на 16 и добавляйте соответствующий символ к результату, пока число не станет равным нулю.
Переверните строку результата и удалите ведущие нули, если они есть. Если строка пустая, верните "0".
😎