繁体   English   中英

将 Denary 转换为 Binary 问题(python)

[英]Convert Denary to Binary problem (python)

我遇到了一个问题,我必须编写一个 function,它使用重复除以二的算法将拒绝数转换为二进制数。 步骤包括:

- 要转换的数字除以二。

- 除法的余数是下一个二进制数字。 数字被添加到序列的前面。

- 结果被截断,因此下一个除以二的输入始终是 integer。

- 算法继续,直到结果为 0。

请点击以下链接查看 output 应该是什么样的: https://i.stack.imgur.com/pifUO.png

到目前为止,这是我的代码:

def dentobi(user):
  denary = user
  divide = user / 2
  remainder = user % 2
  binary = remainder
  
  while user != 0:
    print("Denary:", denary)
    print("Divide by 2:", divide)
    print("Remainder:", remainder)
    print("Binary:", binary)
    break
user = int(input("Please enter a number: "))
dentobi(user)

当一个数字没有余数时,我的 output 是:

Please enter a number: 20
Denary: 20
Divide by 2: 10.0
Remainder: 0
Binary: 0

Output 当数字确实有余数时:

Please enter a number: 20
Denary: 20
Divide by 2: 10.0
Remainder: 0
Binary: 0

这是我想要发生的事情的一部分,但是我需要它一遍又一遍地迭代,直到实际值达到零。

我每次都需要一些帮助来将其余部分编码为前面的 go,感谢您的建议。

您可以将递归用于此类解决方案:

从数学导入楼层

def denary_to_binary(num: int):
    print(f"num: {num}, num / 2: {floor(num / 2)}, remainder: {num % 2}")
    if num <= 1:
       return str(num)
    
    return denary_to_binary(floor(num / 2)) + str(floor(num % 2))

print(denary_to_binary(26))
print(denary_to_binary(20))

产生:

num: 26, num / 2: 13, remainder: 0
num: 13, num / 2: 6, remainder: 1
num: 6, num / 2: 3, remainder: 0
num: 3, num / 2: 1, remainder: 1
num: 1, num / 2: 0, remainder: 1
11010
num: 20, num / 2: 10, remainder: 0
num: 10, num / 2: 5, remainder: 0
num: 5, num / 2: 2, remainder: 1
num: 2, num / 2: 1, remainder: 0
num: 1, num / 2: 0, remainder: 1
10100

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM