汇芳书院

专注计算机视觉、机器学习、分布式计算等领域, 兼聊投资、写作、生活

0%

数字转换为十六进制数

牛客网进制转换

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 进制转换
# @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进制数

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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++刷题吧

坚持原创分享,您的支持将鼓励我继续创作

欢迎关注我的其它发布渠道

------------- 本文结束,感谢阅读 如有问题可留言交流 -------------