数字转换为十六进制数

· 约 1 分钟阅读 · 次阅读 leetcode

牛客网进制转换

描述 给定一个十进制数 M ,以及需要转换的进制数 N 。将十进制数 M 转化为 N 进制数。 当 N 大于 10 以后, 应在结果中使用大写字母表示大于 10 的一位,如 ‘A’ 表示此位为 10 , ‘B’ 表示此位为 11 。 若 M 为负数,应在结果中保留负号。

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 进制转换
# @param M int整型 给定整数
# @param N int整型 转换到的进制
# @return string字符串
#
class Solution:
    def solve(self , M: int, N: int) -> str:
        # write code here
        flag = True
        if M < 0:
            flag = False
            M = -M
        digit_map = {
            10: 'A',
            11: 'B',
            12: 'C',
            13: 'D',
            14: 'E',
            15: 'F'
        }
        num = M
        ans = ''
        while num >= N:
            tmp = num % N
#             print(num,tmp)
            ans = str(tmp) + ans if tmp < 10 else digit_map[tmp] + ans
#             print('ans', ans)
            num = num // N
        tmp = num % N
        ans = str(tmp)+ans if tmp < 10 else digit_map[tmp] + ans
        while ans[0] == '0':
            ans = ans[1:]
        if not flag:
            ans = '-' + ans
        return ans
    

力扣转换16进制数

这个一个位运算的题目,需要对原码、反码、补码等知识了解比较清楚

class Solution {
public:
    string toHex(int num) {
        if (num == 0){
            return "0";
        }
        string stringBuffer;
        for (int i = 7; i >=0; i--){
            int val = (num >> (4*i)) & 0xf;
            // 当val为0时,不能为最左第一个字符,即string不能为空
            if (val > 0 || stringBuffer.length() > 0){
                char digit = val < 10 ? (char)('0'+val) : (char)('a'+val-10);
                stringBuffer.push_back(digit);
            }
        }
        return stringBuffer;
    }
};

感觉用C++刷题虽然会慢一点,但是感觉会很清晰,要不后面还是用C++刷题吧