【问题标题】:How do I Improve this code如何改进此代码
【发布时间】:2016-12-20 00:26:42
【问题描述】:

这是原始代码。

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

我想改进代码。让它更快,并缩短它。任何帮助,也许是更有效的算法。

【问题讨论】:

  • 哦,看起来像复制品。 stackoverflow.com/questions/2339695/…
  • 如果代码有效,请查看Code Review
  • 您需要首先说明您要解决的问题,而不是要求读者通过研究您的代码来尝试解决这个问题。您应该通读 SO faq
  • 您能否添加示例输入和预期输出?

标签: ruby


【解决方案1】:

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()。它们并不简单。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-25
    • 1970-01-01
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多