본문 바로가기

Algorithm

[LeetCode] 405. Convert a Number to Hexadecimal (C++)

 

Convert a Number to Hexadecimal - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

풀이

답을 구하는 과정은 간단하죠. 16으로 나누어 나머지를 string에 계속 이어 붙이면 됩니다.

하지만 저 같은 C++ 초보는 배울 점이 많았다고 생각이 듭니다ㅎㅎ

 

[String에 char  insert하는 법]

string에 char를 insert하기 위해서는 char의 데이터 크기를 정해주어야 합니다.

string& insert (size_t pos, size_t n, char c);
ex) string& insert (str_var, 1, 'c');

 

[Unsigned int 활용하는 법]

uint32_t 변수에 음수를 넣게 된다면 어떻게 될까요? 저는 사실 생각을 해본 적이 없는 것 같습니다.

오류가 나지 않을까 싶기도 하지만 결과는 아래와 같이 출력됩니다.

int num = -1;
printf("%u", num);	// 4294967295
printf("%d", num);	// -1

즉, unsigned int에 들어온 -1을 signed int로 변환하면서 2의 보수를 취해지는 것이죠.

해당 연산을 통해서 문제에서 원하는 2의 보수과정을 간단한 타입활용을 통해 해결할 수 있게 됩니다.

Code

class Solution {
public:
    string toHex(int num) {
        if(num==0) return "0";
        string ans;
        string mmap = "0123456789abcdef";
        uint32_t un = num;
        while(un){
            ans.insert(0, 1, mmap[un & 0xF]);
            un >>= 4;
        }
        return ans;
    }
};

 

문제 설명

Given an integer num, return a string representing its hexadecimal representation. For negative integers, two’s complement method is used.

All the letters in the answer string should be lowercase characters, and there should not be any leading zeros in the answer except for the zero itself.

Note: You are not allowed to use any built-in library method to directly solve this problem.

 

Example 1:

Input: num = 26
Output: "1a"

Example 2:

Input: num = -1
Output: "ffffffff"

 

Constraints:

  • -231 <= num <= 231 - 1