2012-09-29 58 views
1

我想编写一个方法,它需要一个整数和一个位长度并返回与这些位相对应的整数数组。通过位操作将整数分解为整数数组

例如:

decompose(100, 4) 
#=> [4, 12] 

because: 

100 is 01001100 in binary 
     / \ 
     0100 1100 
     4  12 

decompose(123456, 6) 
#=> [1, 8, 60, 0] 

because: 

123456 is 000001001000111100000000 in binary 
     /  |  |  \ 
      1  8  60  0 

注:我不需要担心位长不准确除数。

+0

我不认为你有正确的号码。 – sawa

回答

2
def decompose n, l, a = [] 
    n, r = n.divmod(2 ** l) 
    a.unshift(r) 
    n.zero? ? a : decompose(n, l, a) 
end 

decompose(100, 4) # => [6, 4] 
decompose(123456, 6) # => [30, 9, 0] 
0

这个怎么样?

def decompose(num, len) 
    num.to_s(2).chars.each_slice(len).map { |x| x.join.to_i(2) }.reverse 
end 

decompose(100, 4) 
#=> [4, 12] 

或者这样:

def decompose(num, len) 
    num.to_s(2).scan(/.{1,len}/).map { |x| x.to_i(2) }.reverse 
end