如何在少于三个变量中存储三个小数字

use*_*574 0 math

通过任何操作,三个自然数可以存储在少于3个变量中吗?

假设我们在0-150范围内有三个数字,例如:255,12,67.数字彼此无关.

现在存储它们我们需要三个变量或一个数组,但是可以通过任何数学运算将这些数字存储在2个变量中吗?

kil*_*nan 10

你可以,但这取决于三个数字的范围......

如果您知道存储的是2字节的无符号类型,那么您将有16位,因此使用这种模式

aaaabbbbbccccc0
Run Code Online (Sandbox Code Playgroud)

您将能够存储3个5位数.您可以通过移动或分割来检索值:使用上面的模式

a = n / (2^11)
b = (n % 2^11) / 2^6
c = (n % 2^6) / 2
Run Code Online (Sandbox Code Playgroud)

哪里

  • n是变量
  • %用于删除最左边的位
  • 除法用于删除最右边的位(当然,它必须是整数除法)


zig*_*tar 5

你可以存储三个自然数a,b,c

x = 2^a * 3^b * 5^c
Run Code Online (Sandbox Code Playgroud)

要检索原始数字,您可以进行素数分解,x并找到a指数2,b作为指数3c指数5.

这样,您可以通过使用更多素数在一个自然数中存储无限多个自然数.为了确保您不会丢失信息,您可能希望将一个BigInt类用于任意大数.

  • 并且非常低效.(2 ^ a)部分称为一元编码,这已经够糟糕了.其他部分甚至更糟. (3认同)