[英]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.