我正在尝试实现我自己的二进制转换为十进制的方法,我遵循以下计算二进制字符串101
的十进制值的示例:
101 => 1 * 2 ^ 2 + 0 * 2 ^ 1 + 1 * 2 ^ 0 => 1 * 4 + 0 * 2 + 1 * 1 => 4 + 1 = 5>
方法是
def to_decimal binary
num_array = binary.to_s.split('').map(&:to_i)
puts num_array.inject { |dec, num| dec + num * 2**(num_array.length-1) }
end
这似乎适用于1001
,它给出了9
,但100
给出了1
, 11010
给出了33
,当它应该给出26。我试着查了一下,但我发现了几种不同的方法来处理这个问题,它们让我更加困惑。
而不是:
num_array.inject{ |dec, num| dec + num * 2**(num_array.length-1) }
你的意思是(乘以当前功率,并从最低到最高构建十进制):
num_array.reverse!
num_array.each_index.inject(0){ |dec, index| dec + num_array[index] * 2**index }