LeetCode 405 Convert a Number to Hexadecimal

来源:互联网 发布:大学生网络家教兼职 编辑:程序博客网 时间:2024/06/06 18:52

题目:

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:26Output:"1a"

Example 2:

Input:-1Output:"ffffffff"
题目链接

题意:

给一个int的整型数,需要将其转化为16进制表示的字符串,要求负数用补码来表示。给出了四点注意事项:

  1. 所有字母a-f全部小写。
  2. 不允许前置0,除非值为0.
  3. 所给的数保证在32位int的范围内。
  4. 不得使用库函数来转换进制。
补码的 有关概念,百科给出其特点为:
  1. 一个负整数或原码与其补数相加,和为模。
  2. 对一个整数的补码再求补码,等于该证书本身。
  3. 补码的正零与负零表式方法相同。
第一次写的时候采用特点一的思路,拿到num,对其判断是否为负,假如为负,则用ffffffff+1减去该数,注意这里ffffffff应为unsign,并且+1的位置应在减去abs(num)之后。
代码如下:
class Solution {public:    string totoHex(unsigned num) {  // 将unsign转化为hex        char HEX[] = "0123456789abcdef";        string ans;        while (num) {            ans.push_back(HEX[num % 16]);            num /= 16;        }        reverse(ans.begin(), ans.end());        return ans;    }    string toHex(int num) {        unsigned t = num;        if (!num) return "0";        else if (num < 0) {            unsigned temp = 4294967295;            t = temp - abs(num) + 1;        }        return totoHex(t);    }};

写完之后立刻意识到,int的负数表示其实在unsigned里就是模减去绝对值,所以直接对num进行强制转换,再进行处理,得到第二种写法:

class Solution {public:    string totoHex(unsigned num) {        char HEX[] = "0123456789abcdef";        string ans;        while (num) {            ans.push_back(HEX[num % 16]);            num /= 16;        }        reverse(ans.begin(), ans.end());        return ans;    }    string toHex(unsigned num) {        return num ? totoHex(num) : "0";    }};


原创粉丝点击