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

系统 1489 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 进制数字和 “十二地支进制” 数字之间的转换函数。不需要考虑负数。
“”"
这道题的本质就是十进制转十二进制。跟十进制转十六进制或者八进制原理一样。十进制转二进制是“除二倒取余数法”如下图:
使用python编写十二进制与十进制转换程序_第1张图片

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

十六进制转十进制的转换方式是“加权求和法”,如下图:
使用python编写十二进制与十进制转换程序_第2张图片
图中的十六进制数应为: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

            
          

或许不是最简单的,不过思路应该是清晰的。


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论