使用伪代码,如果我有一个整数数组,我如何制作一个代表相同数组的大整数?
输入示例(使用位):
[10101,10001,00010,01100]
整数应该是: 10101100010001001100 要么 01100000101000110101
答案 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
,这是我们想要随后应用于所有列表元素以达到目标和起始值的函数。在你的情况下,你想要的是:
Z
是空字符串。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))