【发布时间】:2014-08-03 22:31:11
【问题描述】:
我有一个 20x30 的数组,其中包含 int 类型的值。每一行应该集中成一个数字。例如,考虑一个 3x4 数组: |1 3 6 1| |4 2 5 2| |8 3 1 5| 它应该变成:|1361、4252、8315| 问题是,我有 30 个数字,所以我需要 30 个数字,而我可以使用 unsigned long long int 存储的最大数字是 +18,446,744,073,709,551,615,它只包含 20 个数字
原始问题: 上一个问题是分配的一部分,其中我有一个返回 Nx30 数组的哈希函数。数组的每一行由 30 个整数组成,并将它们放在一起,表示 N 个输入数据之一的 30 位哈希值。
我必须使用基数排序对这些哈希进行排序。我的导师告诉我,我可以将这 30 位数字匹配为 64 位整数。鉴于哈希值在 0-3 的范围内,我可以将它们集中在一个 64 位数组中,每个位使用 2 位吗?
【问题讨论】:
-
那么,你想在一个整数中存储30个整数吗?即使前 30 个是 32 位而不是 64 位,它仍然是不可能的。提供问题的更多细节和您想要实现的代码示例可能有助于我们指导您找到更好的解决方案。
-
你所有的整数都是个位数吗?
-
如果
stdint中存在uint32_t或uint64_t,则必须使用它们的数组。 -
存储 0..9 范围内的 30 个数字需要 100 位。微不足道的数学:10^30 = 2^99.6578。唯一的出路是限制数字可以是什么。如果你只有 4 个值,比如 0..3,那么 4^30 = 2^60。这是你能做到的最好的。
-
话说,问题没有解决办法。如果我们知道您为什么要这样做,也许会有办法。
标签: c int long-integer largenumber