写在前面:
最近在学习数据分析方向的课程,开始系统地学习Python,越来越对“人生苦短,故我用python”这句话有感触了,Python在某些方面确实有其过其他语言之处。它简洁的语法也让我着迷(cpp & java:我不要面子的吗?)
此外,通过这一学期的学习,希望我可以把代码写的更加美观(回头看看自己大一写的代码,真的是又水又丑,再看看现在大一学弟们的代码,真是惭愧了!)。有空一定要把《代码整洁之道》拿来好好拜读一下。也希望有幸看到的读者能给我提提建议,大家一起学习,共同进步!
正文:
进制转换是非常简单以及基础的内容,非常适合用来做语言熟悉度训练。此外用Python做进制转换的优势有至少以下两点:
- Python具有任意精度的整数,因此没有真正的固定最大值。你只受到可用内存的限制。 所以可以不限位数的进行转换进制,而如果使用cpp则需要用数组模拟。
- 把其他进制转为10进制时很方便,可以用Python内置好的函数
int()
代码:
S = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
# 方便字符转换(超过十进制)
# m进制ton进制 (m进制到10进制,10进制到n进制)
"""
function declaration:
:mhex_to_dec(m, origin): m进制到10进制
:dec_to_nhex(n, origin): 10进制到n进制
:mhex_to_nhex(m, n, origin): m进制到n进制
"""
def mHex_to_dec(origin, m):
"""
:param m: Hex(进制, 类型int)
:param origin: the num to be converted(待转换的数, 类型为str)
:return: num in Dec(十进制数,类型为str)
"""
return str(int(origin, base=m))
def dec_to_nhex(origin, n):
"""
:param n: target Hex(目标进制,类型int)
:param origin: the num to be converted(待转换的数,类型为str)
:return: num in nHex(n进制数, 类型str)
"""
origin = int(origin)
List = []
while origin // n:
List.append(S[origin % n])
origin //= n
List.append(S[origin])
List.reverse()
List = [str(each) for each in List] # 把list里的每个int转为str,方便后面join
return ''.join(List)
def mhex_to_nhex(origin, m, n):
"""
:param m: origin Hex(原进制,类型int)
:param n: target Hex(目标进制,类型int)
:param origin: the num to be converted(待转换的数, 类型str)
:return: num in nHex(n进制数,类型str)
"""
dec_num = mHex_to_dec(origin, m) # type(dec_num) = int
return dec_to_nhex(dec_num, n) # return's type: str
if __name__ == '__main__':
mm, nn = map(int, input().split()) # 在同一行输入当前进制,目标进制
num_str = input() # 在第二行输入当前进制下的数
print(mhex_to_nhex(num_str, mm, nn)) if num_str[0] != '-' else print('-'+mhex_to_nhex(num_str[1::], mm, nn))