题目
描述
给定一个十进制数 M ,以及需要转换的进制数 N 。将十进制数 M 转化为 N 进制数。
当 N 大于 10 以后, 应在结果中使用大写字母表示大于 10 的一位,如 ‘A’ 表示此位为 10 , ‘B’ 表示此位为 11 。
若 M 为负数,应在结果中保留负号。
数据范围:
要求:空间复杂度O(M),时间复杂度 O(M)
思路
模拟十进制转其他进制的方法,倒序输出余数。
代码
python版本:
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 进制转换
# @param M int整型 给定整数
# @param N int整型 转换到的进制
# @return string字符串
#
class Solution:
def solve(self , M: int, N: int) -> str:
# write code here
if M==0:
return M
hash_map = {10:"A", 11:"B", 12:"C",
13:"D", 14:"E", 15:"F",
16:"G"}
sign = ''
if M<0:
M = -M
sign = '-'
Y = M
R = []
while(M!=0):
Y = M%N
M = M//N
R.insert(0, Y)
for i, e in enumerate(R):
if e in hash_map.keys():
R[i] = hash_map[e]
else:
R[i] = str(e)
res = "".join(R)
res = sign + res
return res
c++版本:
class Solution {
public:
/**
* 进制转换
* @param M int整型 给定整数
* @param N int整型 转换到的进制
* @return string字符串
*/
string solve(int M, int N) {
// write code here
string map_str = "0123456789ABCDEF";
int sign = false;
if(M<0){
sign = true;
M = -M;
}
string res = "";
while(M!=0){
res += map_str[M%N];
M/=N;
}
if(sign){
res += "-";
}
reverse(res.begin(), res.end());
return res;
}
};