LeetCode 405 Convert a Number to Hexadecimal
2017-07-31 20:38
417 查看
题目:
Given an integer, write an algorithm to convert it to hexadecimal. For negative integer, two’s complement method
is used.
Note:
All letters in hexadecimal (
The hexadecimal string must not contain extra leading
zero, it is represented by a single zero character
in the hexadecimal string will not be the zero character.
The given number is guaranteed to fit within the range of a 32-bit signed integer.
You must not use any method provided by the library which converts/formats the number to hex directly.
Example 1:
Example 2:
题目链接
题意:
给一个int的整型数,需要将其转化为16进制表示的字符串,要求负数用补码来表示。给出了四点注意事项:
所有字母a-f全部小写。
不允许前置0,除非值为0.
所给的数保证在32位int的范围内。
不得使用库函数来转换进制。
补码的 有关概念,百科给出其特点为:
一个负整数或原码与其补数相加,和为模。
对一个整数的补码再求补码,等于该证书本身。
补码的正零与负零表式方法相同。
第一次写的时候采用特点一的思路,拿到num,对其判断是否为负,假如为负,则用ffffffff+1减去该数,注意这里ffffffff应为unsign,并且+1的位置应在减去abs(num)之后。
代码如下:
写完之后立刻意识到,int的负数表示其实在unsigned里就是模减去绝对值,所以直接对num进行强制转换,再进行处理,得到第二种写法:
Given an integer, write an algorithm to convert it to hexadecimal. For negative integer, two’s complement method
is used.
Note:
All letters in hexadecimal (
a-f) must be in lowercase.
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.
The given number is guaranteed to fit within the range of a 32-bit signed integer.
You must not use any method provided by the library which converts/formats the number to hex directly.
Example 1:
Input: 26 Output: "1a"
Example 2:
Input: -1 Output: "ffffffff"
题目链接
题意:
给一个int的整型数,需要将其转化为16进制表示的字符串,要求负数用补码来表示。给出了四点注意事项:
所有字母a-f全部小写。
不允许前置0,除非值为0.
所给的数保证在32位int的范围内。
不得使用库函数来转换进制。
补码的 有关概念,百科给出其特点为:
一个负整数或原码与其补数相加,和为模。
对一个整数的补码再求补码,等于该证书本身。
补码的正零与负零表式方法相同。
第一次写的时候采用特点一的思路,拿到num,对其判断是否为负,假如为负,则用ffffffff+1减去该数,注意这里ffffffff应为unsign,并且+1的位置应在减去abs(num)之后。
代码如下:
class Solution { public: string totoHex(unsigned num) { // 将unsign转化为hex char HEX[] = "0123456789abcdef"; 9849 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"; } };
相关文章推荐
- 【LeetCode】405 Convert a Number to Hexadecimal (java实现)
- LeetCode405 Convert a Number to Hexadecimal
- Leetcode 405 Convert a Number to Hexadecimal
- LeetCode[405] Convert a Number to Hexadecimal
- LeetCode405 Convert a Number to Hexadecimal
- Leetcode Convert a Number to Hexadecimal 405
- LeetCode 405 Convert a Number to Hexadecimal
- Leetcode 405: Convert a Number to Hexadecimal
- 【LeetCode】405 Convert a Number to Hexadecimal (java实现)
- [LeetCode]Convert a Number to Hexadecimal(Java)
- [LeetCode] Convert a Number to Hexadecimal 数字转为十六进制
- [Leetcode] Convert a Number to Hexadecimal
- leetcode[Convert a Number to Hexadecimal]//待整理多种解法
- Leetcode: Convert a Number to Hexadecimal
- LeetCode -- Convert a Number to Hexadecimal
- leetcode-456-Convert a Number to Hexadecimal
- LeetCode Convert a Number to Hexadecimal
- 【LeetCode】Convert a Number to Hexadecimal 解题报告
- Leetcode Convert a Number to Hexadeci
- 405. Convert a Number to Hexadecimal