gpt4 book ai didi

c++ - 将 n 个整数组合成一个唯一的表示

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:18:47 26 4
gpt4 key购买 nike

类似这个问题: How to combine three integers into one unique tag, such that the tag stays integer in C++?

但是对于任意数量的整数?

如果我们想缩小范围,假设我们有 30 个整数,每个整数的值都在 0 到 5 之间。是否可以定义一个整数值来唯一定义整数列表?

最佳答案

通常,您可以通过乘法和加法将多个整数组合在一起。如果 r 是所需值的范围(对于 0-5 的示例为 6),那么您可以像这样组合它们:

uint64_t sum = 0
for (int i = 0; i < n; ++i)
{
sum *= r;
sum += value[i];
}

如果您尝试组合过多的值,您将会溢出。您可以使用一个简单的公式来预测整数中所需的位数:

bits = log(pow(r, n)) / log(2);

在您的示例中,您需要 78 位。这超过了大多数整数类型可以存储的数量,因此您将无法组合所有 30 个值。

如果 r 是 2 的幂,您可以使用移位而不是乘法。这样效率会稍微高一些,尤其是当您需要稍后提取原始值时。这就是为什么链接问题中的答案都使用移位。如果您的范围 r 不接近 2 的幂,这将限制您可以组合的值的数量。

关于c++ - 将 n 个整数组合成一个唯一的表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29606030/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com