如何从以m为底的字符串转换为以n为底的字符串。由于没有直接的方法可以将基数m转换为基数n,因此我决定先将基数n转换为基数10。我想到了以下代码:

to_convert = [x for x in input().split()] #string elements
number = to_convert[0] #substrings
m = to_convert[1] #starting base
n = to_convert[2] #end base

val_b10 = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9,
'A': 10, 'B': 11, 'C': 12, 'D': 13, 'E': 14, 'F': 15, 'G': 16, 'H': 17, 'I': 18, 'J': 19, 'K': 20,
'L': 21, 'M': 22, 'N': 23, 'O': 24, 'P': 25, 'Q': 26, 'R': 27, 'S': 28, 'T': 29, 'U': 30, 'V': 31,
'W': 32, 'X': 33, 'Y': 34, 'Z': 35}

#invalid m or n
if 2 < int(m) < 36 or 2 < int(n) < 36:
    print('Invalid Input. 2 <= m,n <= 36')

#digits outside base m

#convert number to base 10
sum_b10 = 0
for i in range(len(number) - 1, -1, -1):
    for digit in number:
        sum_b10 += val_b10[digit] * (int(m)**i)
print(sum_b10)


但是,sum_b10并不是完全的答案。另外,您怎么知道不属于基数的数字呢?

最佳答案

您的代码中有3个问题:


您在number上迭代两次(2个for循环)
您以错误的顺序考虑数字:最低有效数字在前,而自然顺序在前
此测试看起来不正确:if 2 < int(m) < 36 or 2 < int(n) < 36:(这里的目的是什么?)

10-08 11:21