LeetCode 405: Convert a Number to Hexadecimal

 

LeetCode 405: Convert a Number to Hexadecimal

题目描述

给定一个整数,编写一个算法将其转换为十六进制。对于负整数,使用二进制补码表示方法。

注意:

  1. 十六进制(a-f)中的所有字母都必须小写。
  2. 十六进制字符串不得包含额外的前导0串。如果数字为零,则用单个零字符表示'0';否则,十六进制字符串中的第一个字符将不是零字符。
  3. 保证给定的数字适合32位有符号整数的范围。
  4. 您不得使用库提供的任何将数字直接转换/格式化为十六进制的方法。

解题思路

 十进制转十六进制可利用每四位二进制对应一位十六进制的机制进行转化,每次取得num的二进制低四位然后通过一个十六进制查找表转化为对应的十六进制形式即可。

AC代码

class Solution1 {
public:
	string toHex(int num) {
		if (num == 0)
			return "0";
		//定义十六进制映射表
		char map[26] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e','f' };
		string res;
		while (num && res.length() < 8) //第二个条件保证不超过32位
		{
			//取num的低四位
			res = map[num & 0xf] + res;
			//经过验证,对负数同样适用!!!
			num >>= 4; //这个地方舍弃低四位,注意容易写成num>>4,这就不对了!!!
		}
		return res;
	}
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值