请问这段代码问题所在,只能转换1,2,4,,8,16,32这样的数,其他数显示RESTART: Shell
本帖最后由 宋立赢 于 2020-6-8 11:10 编辑import sys
sys.setrecursionlimit(100000000)
o = []
def i(n):
if n == 0.5:
global o
o.reverse()
print(o)
else:
o.append(int(n%2))
n /= 2
i(n)
n = int(input('请输入需要转为二进制的十进制数:'))
i(n)
本帖最后由 Twilight6 于 2020-6-8 11:15 编辑
改成小于1就好了
import sys
sys.setrecursionlimit(100000000)
o = []
def i(n):
if n < 1:
global o
o.reverse()
print(o)
else:
o.append(int(n%2))
n /= 2
i(n)
n = int(input('请输入需要转为二进制的十进制数:'))
i(n)
然后我觉得这样打印效果更好些:
import sys
sys.setrecursionlimit(100000000)
o = []
def i(n):
if n < 1:
global o
o.reverse()
for x in o:
print(x,end='')
else:
o.append(int(n%2))
n /= 2
i(n)
n = int(input('请输入需要转为二进制的十进制数:'))
i(n)
import sys
sys.setrecursionlimit(100000000)
o = []
def i(n):
if n < 1: #<---修改这个条件,否则不是2的n次方的数都会陷入无限递归
global o
o.reverse()
print(o)
else:
o.append(int(n%2))
n /= 2
i(n)
n = int(input('请输入需要转为二进制的十进制数:'))
i(n) txxcat 发表于 2020-6-8 11:17
蟹蟹{:5_105:} 宋立赢 发表于 2020-6-8 11:19
蟹蟹
import sys
sys.setrecursionlimit(100000000)
o = []
def i(n):
global o
if n < 1 and o != []:
o.reverse()
for x in o:
print(x,end='')
else:
o.append(int(n%2))
n /= 2
i(n)
n = int(input('请输入需要转为二进制的十进制数:'))
i(n)
代码改这样,不然 0 时候不会打印 Twilight6 发表于 2020-6-8 11:20
代码改这样,不然 0 时候不会打印
好的好的,非常感谢{:5_105:} 宋立赢 发表于 2020-6-8 11:28
好的好的,非常感谢
没事没事~ Twilight6 发表于 2020-6-8 11:34
没事没事~
那个...能讲下为啥是小于一么{:5_92:} Twilight6 发表于 2020-6-8 11:34
没事没事~
我琢磨明白了,再次感谢你的回答{:5_108:} 宋立赢 发表于 2020-6-8 11:37
那个...能讲下为啥是小于一么
只要比 1 小 余数肯定不为 1 了,就不用再次 o.append(int(n%2))
而你 0.5 就没考虑到其他非偶数被除的情况,比如 15 第一次除2= 7.5第二次 除2 = 3.75第三次 = 1.875 第四次 等于 0.9375 这时候就可以返回了 不用在递归了 Twilight6 发表于 2020-6-8 11:48
只要比 1 小 余数肯定不为 1 了,就不用再次 o.append(int(n%2))
而你 0.5 就没考虑到其他非偶数被除 ...
好的{:5_108:}
页:
[1]