2016-08-12 155 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()。他們並不簡單。