leetcode 405. Convert a Number to Hexadecimal
来源:互联网 发布:矩阵分解 als 编辑:程序博客网 时间:2024/05/01 12:46
https://leetcode.com/problems/convert-a-number-to-hexadecimal/
这题我们可以通过两个思路进行开展。
很明显是已二进制的形式存储的,那么不管我们输入的是正数还是负数,其实计算机内部已经有了完整的存储,那么其实不需要我们自己再去计算反码补码,我们只需要对其进行2进制转换成16进制就可以了。
2.了解计算机在存储数的机制
M: https://leetcode.com/problems/maximum-product-of-word-lengths
H: https://leetcode.com/problems/minimum-unique-word-abbreviation
题目描述
给出一个整型(int)的数,将其转换为十六进制的表示方法,负数要用二进制补码的形式表示样例
Example 1:Input:26Output:"1a"Example 2:
Input:-1Output:"ffffffff"
解题思路分析
首先,如果这个数是个正数的话,那么非常简单,所以这题的关键就在于负数的情况。这题我们可以通过两个思路进行开展。
1.负数的二进制补码表示
很多人都是知道负数在计算机内部的存储方式是补码的形式,也知道负数的补码就等于其反码+1。举个例子,如果我们使用的是4位的二进制,那么2的表示形式就是0010,2的反码表示形式就是1101,所以-2的表示形式就是其反码+1,是1110,转换成16进制也是同样的道理。所以我们这种思路的做法就是16进制表示形式,然后再对其进行取反,最后再+1得到我们的答案。参考程序
class Solution {public: string toHex(int num) { if(num == 0) return "0"; int bit[10]; memset(bit,0,sizeof(bit)); int len = 0; long long n = num; n = abs(n); string ans = ""; while(n) { bit[len++] = n % 16; n /= 16; } if(num < 0) { for(int i=0; i<8; i++) { bit[i] = 15 - bit[i]; } int pos = 0; while(bit[pos] == 15) { bit[pos] = 0; pos++; } bit[pos]++; } int leader0 = 1; for(int i=7; i>=0; i--) { if(bit[i] != 0) leader0 = 0; if(leader0 == 1) continue; if(bit[i] < 10) ans += (char)('0' + bit[i]); else ans += (char)('a' + bit[i] - 10); } return ans; }};
2.计算机内部存储形式转换
一个整型的数,在计算机内部是怎么存储的呢?很明显是已二进制的形式存储的,那么不管我们输入的是正数还是负数,其实计算机内部已经有了完整的存储,那么其实不需要我们自己再去计算反码补码,我们只需要对其进行2进制转换成16进制就可以了。
参考程序
class Solution {public: string toHex(int num) { if(num == 0) { return "0"; } int len = 0; string ans = ""; while(num && len < 8) { int bit = num & 15; if(bit < 10) ans = (char)('0' + bit) + ans; else ans = (char)('a' + bit - 10) + ans; num >>= 4; len++; } return ans; }};
要点突出(需要理解并掌握)
1.需要理解负数在计算机中的存储形式,以及掌握补码的转换方法。2.了解计算机在存储数的机制
相关题目
E: https://leetcode.com/problems/single-numberM: https://leetcode.com/problems/maximum-product-of-word-lengths
H: https://leetcode.com/problems/minimum-unique-word-abbreviation
0 0
- LeetCode 405. Convert a Number to Hexadecimal
- [LeetCode]--405. Convert a Number to Hexadecimal
- [leetcode]405. Convert a Number to Hexadecimal
- LeetCode 405. Convert a Number to Hexadecimal
- leetcode 405. Convert a Number to Hexadecimal
- leetcode 405. Convert a Number to Hexadecimal
- LeetCode 405. Convert a Number to Hexadecimal
- LeetCode 405. Convert a Number to Hexadecimal
- 【LeetCode】 405. Convert a Number to Hexadecimal
- LeetCode 405. Convert a Number to Hexadecimal
- [LeetCode]405. Convert a Number to Hexadecimal
- Leetcode-405. Convert a Number to Hexadecimal
- LeetCode-405. Convert a Number to Hexadecimal
- 【Leetcode】405. Convert a Number to Hexadecimal
- [leetcode]405. Convert a Number to Hexadecimal
- [LeetCode]405. Convert a Number to Hexadecimal
- [leetcode]: 405. Convert a Number to Hexadecimal
- LeetCode 405. Convert a Number to Hexadecimal
- atoi() 函数
- Android实验之实现一个生日备忘簿
- 【iOS沉思录】深思Objective-C中的property属性
- Python缩进问题
- 初步学习opencv的几个程序示例 学习笔记
- leetcode 405. Convert a Number to Hexadecimal
- 从头开始学习yii2---4.对于布局文件的理解
- hdu3853(概率与期望dp入门)
- 递归与尾递归
- 用于简单输出变量的输出操作
- windows server 2008R2安装Oracle10g
- BITS_TO_LONGS宏
- android webview一篇文章全面了解(基本使用,url拦截,js跟java交互)
- 第十二周 项目4 -利用遍历思想求解图问题