受此答案启发(重点是我的):
我们将玩游戏。假设您有一些数字x。您可以从x开始,然后可以加,减,乘或除以除零以外的任何整数。您还可以乘以x。您可以根据需要多次执行这些操作。如果总数变为零,则您赢了。
例如,假设x为2/3。乘以3,然后减去2。结果为零。你赢了!
假设x为7 ^(1/3)。乘以x,然后再乘以x,然后减7。您赢了!
假设x为√2+√3。在这里,要赢得胜利并不容易。但是事实证明,如果您乘以x,然后减去10,再乘以x两次,再加上1,那么您就赢了。(这似乎并不明显;您可以使用计算器进行尝试。)
但是,如果您从x =π 开始,您将无法获胜。如果您对整数进行加,减,乘或除,或与π相乘,则无论采取多少步,都无法从π变为0。(这也不应该很明显。这是非常棘手的事情!)
像√2+√3这样的数字可以被赢得,称为代数。像π这样无法赢得的数字称为先验数字。
为什么这很有趣?每个代数数字都与整数算术相关,游戏中的获胜手法向您展示了如何做到这一点。到达零的路径可能很长且很复杂,但是每个步骤都很简单,并且有一条路径。但是,先验数在本质上是不同的:通过简单的步骤,它们与整数没有算术关系。
本质上,您将使用上面引用的问题中使用的步骤为给定的输入“赢得”游戏。
给定一个实数代数常量x,请使用以下允许的运算将数字转换为零:
- 加或减整数。
- 用非零整数乘或除。
- 乘以原始常数
x。
输入是一个字符串,其中可以包含整数,加法,减法,乘法,除法,乘幂(您对**或的选择^,指数用于表示根)和括号。输入中的空格是可选的,但输出中的空格则是可选的。您应该输出获得零结果所需的步骤,因此乘以7一个步骤将输出为*7。允许尾随空格和/或换行符。
例子
0 -> +0 (or any other valid, or empty)
5/7 + 42 -> -42 *7 -5 (or shorter: *7 -299)
2^(1/3) -> *x *x -2
5*(3**(1/4)) -> *x *x *x -1875
2^(1/2)+3^(1/2) -> *x -10 *x *x +1
最短的代码获胜。
x^4-10*x^2+1。参见WolframAlpha

0结果需要接近多少?鉴于舍入误差和浮点精度,我很容易看到有问题的情况……