2016-08-12 3 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(). Они не простые.

Смежные вопросы