将任意m进制转化成任意n进制(利用顺序栈)

#只限制了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()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

踏歌~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值