数字转换为十六进制数
· 约 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++刷题吧