题目描述
编程实现将一个N进制数转换成M进制数。
问题分析
将N进制数转换为M进制数的一个直接的方法就是将N进制数首先转换为十进制数,再从十进制数往M进制转换。这样相当于把十进制当做一个中间状态来实现N进制到M进制的转换,很大程度上简化了问题。
代码实现
方法一:可实现任意进制转换
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Name: demo27.py
# Author: zhuzhuzhu time:2018/5/29
# Connect: [email protected]
# Desc : 将N进制数转换为M进制数
# Version:python3
def conversion_num(num, src, dest):
rtn = ''
# 1、校验源(N进制)和目标(M进制)是否相同
if src == dest:
rtn = num
# 2、转成10进制#
if src != 10:
num_str = str(num)
# 将列表翻转
num_str = num_str[::-1]
exe_num = 0
dec_num = 0
# 从最后一位数开始
for num_char in num_str:
# 十六进制处理
if num_char == 'A':
num_char = '10'
elif num_char == 'B':
num_char = '11'
elif num_char == 'C':
num_char = '12'
elif num_char == 'D':
num_char = '13'
elif num_char == 'E':
num_char = '14'
elif num_char == 'F':
num_char = '15'
num_int = int(num_char)
if exe_num == 0:
dec_num += num_int
else:
dec_num += src ** exe_num * num_int
exe_num += 1
# 得到给定数字的十进制形式
num = dec_num
# 3、转成目标进制
# 判断目标进制是否为十进制
if dest == 10:
rtn = num
else:
num = int(num)
while True:
divisor = num // dest
remainder = num % dest
# 十六进制处理
if remainder == 10:
remainder = 'A'
elif remainder == 11:
remainder = 'B'
elif remainder == 12:
remainder = 'C'
elif remainder == 13:
remainder = 'D'
elif remainder == 14:
remainder = 'E'
elif remainder == 15:
remainder = 'F'
rtn = str(remainder) + rtn
if divisor <= 0:
break
else:
num = divisor
# 4、处理空的字符串
if rtn == '':
rtn = '0'
return rtn
new_num = conversion_num('011', 2, 10)
print(new_num)
方法二:利用python内置函数(仅适用于目标进制为二进制,八进制,十六进制的情况)
def conversion_num(num, src, dest):
rtn = ''
# 1、校验源和目标是否相同
if src == dest:
rtn = num
# 2、转成10进制
if src != 10:
dec_num = 0
if src == 2:
dec_num = int(num, 2)
elif src == 8:
dec_num = int(num, 8)
elif src == 16:
dec_num = int(num, 16)
num = dec_num
# 3、转成目标进制
if dest == 10:
rtn = num
else:
if dest == 2:
rtn = bin(num)
elif dest == 8:
rtn = oct(num)
elif dest == 16:
rtn = hex(num)
# 4、处理空的字符串
if rtn == '':
rtn = '0'
return rtn
new_num = conversion_num('111111', 2, 16)
print(new_num)