使用递归(二进制转换器)在Ruby中将base-10转换为base2

时间:2016-02-06 17:32:54

标签: ruby-on-rails ruby algorithm recursion binary

我想使用内置的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的前导零?

1 个答案:

答案 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