【问题标题】:Convert decimal to binary, octa and hexadecimal using recursion in python在python中使用递归将十进制转换为二进制、八进制和十六进制
【发布时间】:2021-07-09 03:15:39
【问题描述】:

我尝试将十进制转换为二进制、八进制和十六进制,我需要输出是这样的使用递归且没有内置

Decimal: 10
Decimal to Binary: 01010
Decimal to Octa: 12
Decimal to Hexa: A

到目前为止,我只是在没有递归的情况下得到了这种解决方法

decimal = int(input("Input decimal:"))
#convert binary
def bin(decimal):
    if decimal >= 1:
        bi(decimal // 2)
    return decimal % 2
#convert octa
def octa(decimal):
    if decimal >= 1:
        octa(decimal // 8)
    return decimal % 8
def hex(decimal):
    if decimal >= 1:
        hex(decimal // 16)
    return decimal % 16

有没有办法让它更简单,只使用一个带有递归的def

【问题讨论】:

    标签: python recursion stack


    【解决方案1】:

    是的,您可以通过将数字和底数作为输入来做到这一点 我们知道二进制的基值是 2,八进制是 8,十六进制是 16 试试下面的代码

    import math
    def func(num, base):
        count=0
        while int(num/math.pow(base,(count+1))) > 0:
            count=count+1
        new = []
        while num >= 0:
            p = math.pow(base,count)
            if p == 1:
                new.append(num)
                break
            new.append(int(num / p))
            num = num- new[-1]*p
            count=count-1
        s=""
        for i in new:
            s=s+str(int(i))
        return s
    num=int(input())
    base=int(input())
    print(func(num,base))
    

    【讨论】:

      【解决方案2】:

      可以使用单个递归函数来完成,如下所示:

      • base 作为函数参数
      • 默认数字作为参数覆盖各种基数的不同数字

      代码

      def convert(n, base, digits = "0123456789ABCDEF"):
          ' Function to convert decimal number binary another base '
          if n >= base:
             return convert(n//base, base) + digits[n%base]
          else:
              return digits[n]
          
      

      测试

      n = 10                    # Decimal number
      for base in [2, 8, 16]:   # Bases
          print(f'Decimal {n} to base {base} = {convert(n, base)}')
      

      输出

      Decimal 10 to base 2 = 1010
      Decimal 10 to base 8 = 12
      Decimal 10 to base 16 = A
      

      【讨论】:

        猜你喜欢
        • 2011-08-21
        • 2015-09-06
        • 2014-02-13
        • 2015-12-12
        • 2021-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-26
        相关资源
        最近更新 更多