【问题标题】:Decimal to binary python algorithm十进制到二进制python算法
【发布时间】:2020-02-10 03:11:19
【问题描述】:

我正在尝试创建一种将小数转换为二进制的算法。我不能使用python中的内置函数来这样做。这就是我所拥有的。

n=int(input("enter a number"))

while n > 1:
    print(n%2)
    n //= 2
    if n % 2 ==0:
        print(n%2)
    else:
        print(n%2)

只要它们是正确的,我完全可以将 1 和 0 打印在单独的行中。

【问题讨论】:

标签: python binary decimal


【解决方案1】:

应该是:

n=int(input("enter a number\n"))

while n >= 1:    # Should be >= 1, not > 1.
    print(n%2)
    n //= 2
    # Removed if else.

另外,请注意,这将以相反的顺序打印二进制文件。

对于输入6,输出将是:

0
1
1

不是:

1
1
0

如果你想要后一个,那么你可以先将它存储在一个列表中,然后以相反的顺序打印该列表。

【讨论】:

    【解决方案2】:

    这很好用,返回一个字符串,而且它是一个单独的函数,所以你不会污染你的代码:

    def int2bin( num ) :
        result = []
        while num :
            result.append( str(num & 1) )
            num >>= 1
        return ''.join( result[::-1] )
    

    结果:

    >>> int2bin(4)
    '100'
    

    【讨论】:

    • 这个答案对我帮助很大,但它不适用于 0。我必须将边缘条件添加到此方法中,以便它返回 '0'。
    • @Alexandre 你可以用while num or len(result) == 0 : 替换while num : 来修复0 的情况
    • @Alexandre OP 专门询问了适用于 num >= 1 的算法,但你是对的,我应该让它也适用于 0
    【解决方案3】:

    您可以一步完成division and modulo

    while n:
        n, d = divmod(n, 2)
        print(d)
    

    这基本上是所有答案的核心。但是对于 n = 0,它什么也不打印。对于负 n,会发生奇怪的事情。让我们处理所有整数:

    一个完整的程序(不颠倒数字)可能如下所示:

    if n == 0:
        print(0)
    elif n < 0:
        print('-')
        n = -n
    while n:
        n, d = divmod(n, 2)
        print(d)
    

    【讨论】:

      【解决方案4】:

      如果您想要跟踪正在发生的事情,添加一些打印件和二进制结果,您将其保存在哪里?我建议一个 str,可能是一个 int 列表,我不知道,但这是一种方式(使用您的逻辑作为基础):

      n=int(input("enter a number"))
      
      binary = ""
      while n > 1:
          rest = n % 2
          n //= 2
          print("rest: {}".format(rest), "step: {}".format(n))
          binary = str(rest) + binary  
      if(n>=1):
        binary ="1" + binary  
      
      print(binary)
      

      示例:

      enter a number: <b>2045</b>    
       1. rest: 1 step: 1022
       2. rest: 0 step: 511
       3. rest: 1 step: 255
       4. rest: 1 step: 127
       5. rest: 1 step: 63
       6. rest: 1 step: 31
       7. rest: 1 step: 15
       8. rest: 1 step: 7
       9. rest: 1 step: 3
       10. rest: 1 step: 1
      
       11111111101
      

      【讨论】:

        【解决方案5】:

        你可以这样做:

        n=int(input("Enter a number\n"))
        res=""
        while n >= 1:
          res=res+str(n%2)
          n //= 2
        print(int(res[::-1])) 
        


        样本输出 1:

        Enter a number
        10
        1010
        

        样本输出 2:

        Enter a number
        99
        1100011
        

        【讨论】:

          【解决方案6】:

          使用bin,如果你想要一个简单的方法和干净的代码,这是我的代码

          n = int(input('Input any Integer: '))
          
          dim = str(bin(n)).split('0b', 1)[1].strip()
          
          print('\n'.join([n for n in dim]))
          

          然后使用'\n'.join(...) 打印每行的所有数字

          【讨论】:

            【解决方案7】:

            你可以使用方法 bin()

            def decimalToBinary(n): 
                return bin(n).replace("0b","") 
            

            【讨论】:

              猜你喜欢
              • 2012-10-23
              • 2021-02-26
              • 2012-10-08
              • 1970-01-01
              • 1970-01-01
              • 2019-09-22
              • 2017-06-05
              • 2015-11-01
              • 1970-01-01
              相关资源
              最近更新 更多