我正在尝试实现我自己的将二进制转换为十进制的方法,并且我遵循以下计算二进制字符串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
给出set opt(adhocRouting) DSR
or
set opt(rp) DSR
or
set val(rp) DSR
时给予No
26.我试图查明这一点,但我发现了一些不同的方法来解决这个问题,他们只是让我更加困惑。
答案 0 :(得分:2)
而不是:
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 }