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

注意:我不需要担心不是精确除数的位长度。

4

2 回答 2

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]
于 2012-09-29T16:52:11.490 回答
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
于 2012-09-29T16:46:10.343 回答