MDGSF Software Engineer

[算法学习][leetcode] 405 Convert a Number to Hexadecimal

2017-08-31
mdgsf
Art

https://leetcode.com/problems/convert-a-number-to-hexadecimal/description/

题目

Given an integer, write an algorithm to convert it to hexadecimal. For negative integer, two’s complement method is used.

Note:

  1. All letters in hexadecimal (a-f) must be in lowercase.
  2. The hexadecimal string must not contain extra leading 0s. If the number is zero, it is represented by a single zero character ‘0’; otherwise, the first character in the hexadecimal string will not be the zero character.
  3. The given number is guaranteed to fit within the range of a 32-bit signed integer.
  4. You must not use any method provided by the library which converts/formats the number to hex directly.

Example 1:

Input:
26

Output:
"1a"

Example 2:

Input:
-1

Output:
"ffffffff"

题目翻译

题目解析

参考答案

#include <iostream>
#include <string>
using namespace std;

class Solution {
public:

    char toChar(unsigned int iNum)
    {
        if (iNum < 10)
        {
            return iNum + '0';
        }
        else
        {
            return iNum - 10 + 'a';
        }
    }

    string toHex(int num) {

        string strRet;

        unsigned int uiNum = num;
        unsigned int iRemainder =  uiNum;
        unsigned int iComplement = 0;

        while (1)
        {
            if (iRemainder < 16)
            {
                strRet.append(1, toChar(iRemainder));
                break;
            }
            else
            {
                iComplement = iRemainder % 16;
                iRemainder = iRemainder / 16;
                strRet.append(1, toChar(iComplement));
            }
        }

        int i = 0;
        int j = strRet.size() - 1;
        while (i < j)
        {
            int temp = strRet[i];
            strRet[i] = strRet[j];
            strRet[j] = temp;
            i++;
            j--;
        }

        return strRet;
    }
};

int main()
{
    Solution o;
    string strRet = o.toHex(-1);
    cout << strRet << endl;
    return 0;
}

weixingongzhonghao

Similar Posts

Comments