​LeetCode刷题实战405:数字转换为十六进制数

今天和大家聊的问题叫做数字转换为十六进制数,我们先来看题面:https://leetcode-cn.com/problems/convert-a-number-to-hexadecimal/

Given an integer num, return a string representc#委托ing its hexadecimal representation. For ne算法的时间复杂度取决于gative 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.

给定一个整数,编写一个算法将这个数转换为十六进制数算法的空间复杂度是指。对于负整数,我们通常使用 补码运算 方法算法是什么注意:十六进制中所有字母(a-f)都必须是小写。十六进制字符串中不能包含多余的前导零。如果要转化的数为0,那么以单个字符'0'来表示;对于其他情况,十六进制字符串中的第一个字符将不会是0字符。给定的数确保在32位有符号整数算法的有穷性是指范围内。算法的五个特性不能使用任何由库提供的将数字直接转换或格式化为十六进制的方法。

示例

示例 1:
输入:
26
输出:
"1a"
示例 2:
输入:
-1
输出:
"ffffffff"

解题

主要思路:
整型自动保存为补码形式,因此只要将整型二进制的每四位取出,对应到相应的十六进制数就行。要注意的是,C++中左移c#怎么读是逻辑移动(从末端移掉的位将被舍弃,包括符号位&#xc#为什么用的人很少ff09;。右移是算术移位:对于无符号数字,因移位运c#怎么读算而空出的位上将用零填充。对于有符号数字,符号位用于填充空出的位。也就是说,如果数字为正,则使用 0;如果数字为负ÿc#委托0c;则使算法是什么用 1。所以当整型为负数时,右移永远不会变成0.

class Solution {
public:
    string toHex(int num) {
        string s;
        char map[16]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
        if(num==0) return "0";
        while(num!=0&&s.size()<8)
        {
            s=map[num&0xf]+s;
            num>>=4;
        }
        return s;
    }
};

好了,今天的文章就到这里,如果觉得有所收获,请顺手点个在看算法设计与分析者转发吧,你们的支持是我最大的动力 。