美文网首页
使用python编写十二进制与十进制转换程序

使用python编写十二进制与十进制转换程序

作者: Python小学生邬恒 | 来源:发表于2019-06-13 00:36 被阅读0次

    我在面试前,面试公司发来一道python题,我觉得还挺有意思的。题目如下。"""
    """
    我们知道 2 进制数字由 2 种字符(01)组成,10 进制数字由 10 种字符(0123456789)组成,16 进制由 16 种字符(0123456789ABCDEF)。不同进制的数字之间可以相互转换。

    我们定义一种 "十二地支进制" 数字,这种数字由中国古代地支的 12 种字符(子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥)组成。"十二地支进制" 数字和 10 进制数字的关系可以看下面的代码。

     [
            ["子", 0],
            ["丑", 1],
            ["寅", 2],
            ["卯", 3],
            ["辰", 4],
            ["巳", 5],
            ["午", 6],
            ["未", 7],
            ["申", 8],
            ["酉", 9],
            ["戌", 10],
            ["亥", 11],
            ["丑子", 12],
            ["丑丑", 13],
            ["丑寅", 14],
            ["丑卯", 15],
            ["丑寅子卯", 2019],
        ]
    

    请实现 10 进制数字和 "十二地支进制" 数字之间的转换函数。不需要考虑负数。
    """
    这道题的本质就是十进制转十二进制。跟十进制转十六进制或者八进制原理一样。十进制转二进制是“除二倒取余数法”如下图:


    十进制转二进制 源自网络

    与之类似,十二进制是除以十六。

    十六进制转十进制的转换方式是“加权求和法”,如下图:


    十六进制转十进制 图源网络

    图中的十六进制数应为:713。转换后的十进制为125。

    十二进制转换十进制的方法类似。十二进制是12的N次方。
    在已知上述的转换方式后,该问题就解决了一大半。只需要转换为对应的“地支”数。

    python代码如下:

     a = 2019#给定十进制数如
        b = []
        init_10 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
        dizhi1 = ["子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"]
        int_to_dizhi = dict(zip(init_10, dizhi1))#地支对应的十进制字典
    #十进制转换为地支
    
        if a >= 12:#判断是否大于12?小于12直接转换为对应地支。
    
            if a // 12 >= 12:
    #整除12是否大于12?小于12只做一次除12,大于12会多次除以12。
                while (a >= 12):
                    c = a % 12  # 获得余数
                    a = a // 12  # 循环除
                    b.append(c)
    
                b.append(a)
            else:
                b.append(a % 12)#只做一次除12取余数
                b.append(a // 12)
    
    
        else:
            b.append(a)
    
        ccc=[]#输出
        b.reverse()#列表左右翻转
    
        for i in b:
            ccc.append(int_to_dizhi[i])#将十进制转换为对应的“地支”
        return ccc
    

    地支进制转十进制:

    init_10 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
        dizhi1 = ["子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"]
        int_to_dizhi = dict(zip(dizhi1, init_10))
    
        d = ""#给定的地支如dizhi: str
        d.split()#字符串分割
        z = []
        l = len(d)
        #地支转换成十进制
        for i in list(d):
            z.append(int_to_dizhi[i])
    
        ten = 0
        for i, j in enumerate(z, start=0):
            ten = ten + j * 12 ** (l - i - 1)
    
            print(i, j)
    
        print(ten)
        return ten
    

    可能不是最简单的,但是思路应该是清晰的。

    相关文章

      网友评论

          本文标题:使用python编写十二进制与十进制转换程序

          本文链接:https://www.haomeiwen.com/subject/uksdfctx.html