这是原始代码。
def d_to_b(dec, bin="")
dec = dec.to_i
if (dec < 2)
bin += dec.to_s
bin = bin.reverse
return bin
else
a = dec%2
bin += a.to_s
d_to_b(dec/2, bin)
end
end
def b_to_d(bin)
bin = bin.to_s
a = (bin.length - 1)
dec = 0
i = 0
while(i <= a)
dec += (bin[i].to_i)*(2**(a-i))
i += 1
end
return dec
end
我想改进代码。让它更快,并缩短它。任何帮助,也许是一种更有效的算法。
答案 0 :(得分:4)
Ruby内置了进行基本转换的方法。 Fixnum#to_s
将转换为基数,String#to_i
将转换为基数。
$ ruby -e 'puts 12.to_s(2); puts "1100".to_i(2)'
1100
12
Ruby在C中完成这项工作,你不会更快地完成它。
如果您想了解Ruby的用途,请查看rb_fix2str()
和rb_cstr_parse_inum()
。他们并不简单。