leetcode 405. Convert a Number to Hexadecimal

来源:互联网 发布:矩阵分解 als 编辑:程序博客网 时间:2024/05/01 12:46
https://leetcode.com/problems/convert-a-number-to-hexadecimal/

题目描述

给出一个整型(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-number
M: https://leetcode.com/problems/maximum-product-of-word-lengths
H: https://leetcode.com/problems/minimum-unique-word-abbreviation
0 0
原创粉丝点击