2016-08-12 21 views
0

これは元のコードです。このコードを改善するには

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 

コードを改善したいと思います。それを速くし、短くしてください。任意のヘルプ、おそらくより効率的なアルゴリズム。

+1

ああ、重複のように見えます。 http://stackoverflow.com/questions/2339695/how-to-convert-a-string-or-integer-to-binary-in-ruby – Schwern

+1

コードが機能する場合は、[codereview.se]をチェックしてください。 –

+0

まず、コードを勉強して読者にそれを理解させるように依頼するのではなく、解決しようとしている問題を述べる必要があります。あなたはSO [faq](http://stackoverflow.com/help) –

答えて

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()をご覧ください。彼らは単純ではありません。

関連する問題