#只限制了26个字母+10个数字共36-1=35种进制的转换。其中小数部分并未涉及。
主要思路为:利用将任意设置函数将m进制转化为10进制,然后再设置函数将已经转化为十进制的数转化为任意n进制的数。
其中运用到的主要方法:顺序栈的创建;列表的合理运用;循环的运用。
难点:栈的进栈与出栈;进制转换的方法运用程序进行表达;设置函数进行程序分割;
def Transformanyto10(sum):
yuanjinzhi = input("请输入输入数的进制")
yuanshu = input("请输入该进制下的被转化数")
s = yuanshu
list1 = list(s) # 这是拆分出来的字符串形式的列表,需要转化成数字形式的列表
# 为了处理超过十进制的进制转换,该部分把其中的字母转换成数字#最多支持36进制之内的互相转换
zimulist = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U",
"V", "W", "X", "Y", "Z"]
shuzilist = ['11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27'
'28',
'29', '30', '31', '32', '33', '34', '35', '36']
for i in zimulist:
for j in list1:
if i == j: # 如果list1中有zimulist里面的元素,就进行替换操作,把list1中字母换成shuzilist中的数字
m = list1.index(j) # m是j元素的排序号码,方便后来的元素替换
n = zimulist.index(i)
list1[m] = shuzilist[n]#不用取余的方法因为之后还要改成字符串的形式
list2 = list(map(int, list1))
list2.reverse()
i = 0
sum = 0
for j in list2:
sum = sum + j * (int(yuanjinzhi) ** i)
i = i + 1
print("该数转化为十进制为", sum)
return sum
class SqSrack:
def __init__ (self):
self.data=[]
def empty(self):
if len(self.data)==0:
return True
return False
def push(self,e):
self.data.append(e)
def pop(self):
assert not self.empty()
return self.data.pop()
def gettop(self):
assert not self.empty()
return self.data[len(self.data)-1]
def Transform10toany():
yuanshu = Transformanyto10(sum) #int(input("请输入该十进制下的被转化数"))
zhuanhuanjinzhi = int(input("您想转化为多少进制的数"))
list=[]
#下面的这个模块用来初始化栈
print()
st=SqSrack()
#开始循环进栈
y = yuanshu
z = zhuanhuanjinzhi
while y >= z:
#剩的数大于想转为的进制的时候就要一直运行这个循环
yushu= y%z #然后将这个数入栈 #这步要循环操作
y = y // z
st.push(yushu)
#这步要循环操作#y是剩的数
#把最后的整除数加到栈里
st.push(y)#不能填y//z要不始终得到的是0
while not st.empty():
list.append(st.pop())#!!!!!激动死了!!!!!
zimulist = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U",
"V", "W", "X", "Y", "Z"]
for i in list:
if i > 9:
list[list.index(i)] = zimulist[i%10]
print('原数转换为')
for i in list:
print(i ,end="")
Transform10toany()