如何将整数数组转换为单个整数

时间:2014-01-30 23:24:16

标签: algorithm

使用伪代码,如果我有一个整数数组,我如何制作一个代表相同数组的大整数?

输入示例(使用位):

[10101,10001,00010,01100]

整数应该是: 10101100010001001100 要么 01100000101000110101

4 个答案:

答案 0 :(得分:1)

您正在寻找的内容在函数式编程领域是众所周知的 fold reduce 。基本的想法是,在列表中

a,b,c,d, ..., x

我们用我们想要的操作替换逗号(这里的操作beig由$符号化):

a $ (b $ (c $ (d $ ...(x $ Z)))        // right fold

以及包含默认值Z

的空列表

左侧折叠略有不同,我们从Z开始:

((((Z $ a) $ b) $ c ).... $ x))) 

左折叠的一般命令算法是:

result = Z
for each e in list do result = result $ e

现在,唯一的问题是识别$Z,这是我们想要随后应用于所有列表元素以达到目标和起始值的函数。在你的情况下,你想要的是:

  • 将stringified元素附加到结果字符串。 Z是空字符串。
  • :将元素添加到结果到目前为止乘以2 ^ 5。 Z将为0。

答案 1 :(得分:1)

number = 0
for each element e
   number *= 1 + maximumRepresentableNumber
   number += e

对于您的示例,maximumRepresentableNumber将为11111,因为这是我们可以使用允许的位数表示的最大数量(5)。添加1会给我们100000,如果我们乘以它,它将相当于向左移位5位。

这也适用于十进制表示,即[123, 55, 29]将返回123055029。在这种情况下,maximumRepresentableNumber将为999,因此我们只需乘以1000

答案 2 :(得分:0)

在红宝石中:

answer = 0
[0b10101, 0b10001, 0b00010, 0b01100].each do |x|
  answer <<= 5
  answer |= x
end

puts answer.to_s(2) # 10101100010001001100

答案 3 :(得分:0)

在Python中,这将是:

a = [0b10101, 0b10001, 0b00010, 0b01100]
b = 0
for elem in a:
    b <<= elem.bit_length()
    b += elem
print(bin(b))