我偶然发现了this问题,我不确定我是否理解它是如何工作的。具体来说,大部分原始值都是使用以下代码进行编码的:
// Code num values.
uint64_t code = 0;
size_t k = 1;
do {
code += k * data[i++];
k *= i;
} while (--num);
然后声称下面的代码将返回原始值。
// Extract num values from code.
do {
i++;
data.push_back(code % i);
code /= i;
} while (--num);
但我不确定我是否理解这是怎么可能的。如果我们用一些随机数据运行它,例如
d = [8, 18, 36]
那么我们会得到:
编码
k d[1] Code
-----------------
1 * 8 = 8 8
2 * 18 = 36 44
6 * 36 = 216 260
我不确定如何使用建议的程序取回原始数据。我错过了什么吗?
阅读整个答案很有帮助。特别是我的答案开头的假设,来自OP:
每个值都必须小于其索引,索引从 1
您的示例不满足该限制。