输入一个十进制数,将其转化为任意进制数。
import math
print("请按要求输入,只能输入正数,退出请按“N“")
num = input("请输入需要转换的十进制数:")
if num == "N":
exit(0)
R = input("将十进制转化为:")
while num != 'N' and R != 'N':
num = float(num) # 先将num的str型转化为浮点型
R = int(R) # 将R转化为整数型
num_zheng = math.floor(num) # 截尾法去掉小数部分
num_zheng = int(num_zheng) # 把整数部分转化为整数型,浮点型会多个0和小数点
num_xiao = num - num_zheng
m = []
n = []
if num_zheng == 0: # 判断整数是否为0,若为0,给列表m加个0
m.append(0)
if R < 10:
while num_zheng > 0:
m.append(num_zheng % R)
num_zheng = num_zheng // R
while num_xiao != 0:
n.append(math.floor(num_xiao * R))
num_xiao = (num_xiao * R) - math.floor(num_xiao * R)
else:
while num_zheng > 0:
if num_zheng % R == 10:
m.append("A")
elif num_zheng % R == 11:
m.append("B")
elif num_zheng % R == 12:
m.append("C")
elif num_zheng % R == 13:
m.append("D")
elif num_zheng % R == 14:
m.append("E")
elif num_zheng % R == 15:
m.append("F")
else:
m.append(num_zheng % R)
num_zheng = num_zheng // R
while num_xiao != 0:
if math.floor(num_xiao * R) == 10:
n.append("A")
elif math.floor(num_xiao * R) == 11:
n.append("B")
elif math.floor(num_xiao * R) == 12:
n.append("C")
elif math.floor(num_xiao * R) == 13:
n.append("D")
elif math.floor(num_xiao * R) == 14:
n.append("E")
elif math.floor(num_xiao * R) == 15:
n.append("F")
else:
n.append(math.floor(num_xiao * R))
num_xiao = (num_xiao * R) - math.floor(num_xiao * R)
a = ''.join([str(x) for x in m[::-1]]) # 把m列表的元素从后往前依次取出
b = ''.join([str(x) for x in n[::1]]) # 把n列表的元素从前往后依次取出
if n: # 判断n是否为空,目的为了看是否需要添加小数点,如果n不为空
print('%s.%s' % (a, b))
else: # 如果n为空
print('%s' % a)
num = input("请输入需要转换的十进制数:")
if num == "N":
exit(0)
R = input("将十进制转化为:")