首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >​LeetCode刷题实战405:数字转换为十六进制数

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

作者头像
程序员小猿
发布2021-10-21 15:58:28
发布2021-10-21 15:58:28
6370
举报
文章被收录于专栏:程序IT圈程序IT圈

算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !

今天和大家聊的问题叫做 数字转换为十六进制数,我们先来看题面:

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

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.

给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。

注意:

十六进制中所有字母(a-f)都必须是小写。

十六进制字符串中不能包含多余的前导零。如果要转化的数为0,那么以单个字符'0'来表示;对于其他情况,十六进制字符串中的第一个字符将不会是0字符。

给定的数确保在32位有符号整数范围内。

不能使用任何由库提供的将数字直接转换或格式化为十六进制的方法。

示例

代码语言:javascript
复制
示例 1:
输入:
26
输出:
"1a"

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

解题

主要思路:

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

代码语言:javascript
复制
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;

    }

};

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员小猿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 示例
  • 解题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档