【发布时间】:2021-04-28 12:38:30
【问题描述】:
我正在尝试将八进制数转换为十进制数,为此我想我会将八进制数转换为二进制数,然后将二进制数转换为十进制数。为此,我编写了以下代码:
#test
base_8 = input("Enter octal: ")
binar = ""
if base_8 == 0:
print("The integer value is", 0)
for num in reversed(base_8):
if int(num) > 8:
print("Invalid")
else:
while int(num) > 0:
r = int(num) % 2
num = int(num) // 2
binar = str(r) + binar
print("Octal in binary:", binar)
decimal = 0
exponent = len(binar) - 1
for digit in binar:
decimal = decimal + int(digit) * 2 ** exponent
exponent = exponent - 1
print("The integer value is", decimal)
这适用于 3 以上的数字,但是,由于八进制转换为二进制的方式,数字 0-3 的八进制数字无法正确显示,导致转换为十进制不正确。例如,八进制数 437 转换为 10011111,而不是 100011111,这会影响将其转换为十进制的代码。如果数字不高于 3,我尝试添加代码以使其正确打印,但它只是被忽略了。你们知道我该如何纠正这个问题吗?
【问题讨论】:
-
如果您只想转换一个表示八进制数字的字符串,只需使用所需的基数将其传递给
int()。例如int('77', 8),产生63。 -
问题是在转换成二进制的时候,你只写了必要的数字,比如3 -> 11;但是,为了处理这样的 base-8 转换,您总是需要写 3 位数字,例如。 3 -> 011.
标签: python