NC112 进制转换

描述 给定一个十进制数 M ,以及需要转换的进制数 N 。将十进制数 M 转化为 N 进制数。

当 N 大于 10 以后, 应在结果中使用大写字母表示大于 10 的一位,如 'A' 表示此位为 10 , 'B' 表示此位为 11 。

若 M 为负数,应在结果中保留负号。

数据范围: M <= 10^8, 2≤N≤16 要求:空间复杂度O(M),时间复杂度 O(M)

思路:题目很简单,就是做除法,然后取余。M = k1N^n+k2N^(n-1)+……+kn*N+k0

M % N = k0, M = M//N = k1N^(n-1)+k2N^(n-2)+……+k(n-1)N+kn ,再循环可以依次得到,kn,k(n-1),……,k2,k1。倒数第二次循环,M = k1N + k2 M % N = k2, M = M // N = k1。最后一次循环,M % N = k1, M = 0。

所以每次循环把得到的k(即余数),加到要返回的结果中即可。由于大于10的时候需要转化成A、B、C等,查ASCII码表,看到A的时候ASCII为65,而k为10的时候表示A,所以k+55后转化,即chr(k+55)。数字0的ASCII为48,所以数字的时候是chr(k+48),最开始的时候记录一下正负,负数时,最终要加上负号。

# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 进制转换
# @param M int整型 给定整数
# @param N int整型 转换到的进制
# @return string字符串
#
class Solution:
    def solve(self , M: int, N: int) -> str:
        # write code here
        r = ''
        isNeg = False
        if M < 0:
            M = -M
            isNeg = True
        while M != 0:
            k = M % N
            if k > 9:
                k = chr(k + 55)
            else:
                k = chr(k + 48)
            r = k + r
            M = M // N
        if isNeg:
            r = '-' + r
        return r