leetcode 第十六周解题报告

来源:互联网 发布:什么是淘宝流量怎么用 编辑:程序博客网 时间:2024/05/20 15:11

问题描述:

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.
解题思路:

用移位操作将数的每一位取出保存在bool数组里面,再按每四位为一个单元的顺序重新组织十六进制数即可。


代码:

#include<cmath>class Solution {public:    string toHex(int num) {        char codeT[] = {'0', '1', '2', '3', '4','5',            '6','7','8','9','a','b','c','d','e','f'        };        if (num == 0) return string("0");        //bool sign = (num > 0 ? true : false);        bool bits[32];        for(int i = 31; i >= 0; --i){            bits[31 - i] = num & (1 << i);        }        string res("00000000");        for(int i = 0; i < 8; ++i){            int tmp = 0;            for(int j = 0; j < 4; ++j){                tmp = (tmp << 1) + (int)(bits[i * 4 + j]);            }            res[i] = codeT[tmp];        }        for(int i = 0; i < 8; ++i){            if(res[i] != '0'){                return std::string(res.begin() + i, res.end());            }        }    }};