我想使用内置的to_s(2)方法,使用递归将Ruby 中的base10数字转换为base 而不是。
我写了这个:
def to_binary(d)
if d<1
return ""
else
return to_binary(d/2).to_s + (d%2).to_s
end
end
这将返回所有正确的结果,除了0。是否有任何方法可以为0返回0而没有数字大于0的前导零?
答案 0 :(得分:1)
你可以稍微修改你的支票:
def to_binary(d)
return d.to_s if [0,1].include?(d) # same as "if d == 0 || d == 1"
to_binary(d/2) + (d%2).to_s
end
to_binary(10) == "1010"
#=> true
to_binary(0) == "0"
#=> true
你也可以将上面的方法写成:
def to_binary(d)
return d.to_s if [0,1].include?(d)
div,mod = d.divmod(2)
to_binary(div) + mod.to_s
end