我需要编写一个采用正整数 x 的算法。如果整数 x 为 0,则算法返回 0。如果它是任何其他数字,则算法返回 1。
这就是问题所在。我需要将算法浓缩为一个方程。即没有条件。基本上,我需要一个方程,如果 x 为零,则等于 0,如果 x > 0,则等于 1。
编辑:根据我下面的评论。我意识到我不够清楚。我将公式输入到一个我无法控制的系统中,因此它们有奇怪的限制。
但是,我学到了一些可能在未来有用的技巧!
在 C 和 C++ 中,你可以使用这个技巧:
!!x
在这些语言中,如果 x 为零,!x 的值为 1,否则为 0。因此,如果 x 不为零,则 !!x 计算为 1,否则计算为 0。
希望这可以帮助!
假设 32 位整数:
int negX = -x;
return negX >> 31;
否定 x 会将 1 置于最高位。右移 31 位将 1 移到最低位,并用 0 填充。这对 0 没有任何作用,而是将所有正整数转换为 1。
这基本上是符号函数,但由于您指定了正整数输入,您可以删除将负数转换为 -1 的部分。
尝试return (int)(x > 0)
在我所知道的每一种编程语言中,(int)(TRUE) == 1
并且(int)(FALSE) == 0
由于我所知道的几乎每个系统都使用 IEEE-754 表示浮点数,因此您可以只依赖它的行为(即0.0 / 0.0
和NaN
)NaN != NaN
。伪 C (-Java, ...) 如下:
float oneOrNAN = (float)(x) / (float)(x);
return oneOrNAN == oneOrNAN;
就像我说的,我的问题描述不够清楚。当我说方程时,我指的是纯粹的代数方程。
我确实找到了一个可接受的解决方案:Y = X/(X - .001)
如果它为零,你会得到 0/-.001,这只是 0。任何其他数字,你会得到 5/4.999,这对于我的特定情况来说足够接近 1。
然而,这很有趣:
!!x
谢谢你的提示!