2012-09-29 61 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