2

我需要编写一个采用正整数 x 的算法。如果整数 x 为 0,则算法返回 0。如果它是任何其他数字,则算法返回 1。

这就是问题所在。我需要将算法浓缩为一个方程。即没有条件。基本上,我需要一个方程,如果 x 为零,则等于 0,如果 x > 0,则等于 1。

编辑:根据我下面的评论。我意识到我不够清楚。我将公式输入到一个我无法控制的系统中,因此它们有奇怪的限制。

但是,我学到了一些可能在未来有用的技巧!

4

5 回答 5

6

在 C 和 C++ 中,你可以使用这个技巧:

!!x

在这些语言中,如果 x 为零,!x 的值为 1,否则为 0。因此,如果 x 不为零,则 !!x 计算为 1,否则计算为 0。

希望这可以帮助!

于 2013-10-25T19:59:07.483 回答
3

假设 32 位整数:

int negX = -x;
return negX >> 31;

否定 x 会将 1 置于最高位。右移 31 位将 1 移到最低位,并用 0 填充。这对 0 没有任何作用,而是将所有正整数转换为 1。

这基本上是符号函数,但由于您指定了正整数输入,您可以删除将负数转换为 -1 的部分。

于 2013-10-25T19:57:44.270 回答
3

尝试return (int)(x > 0)

在我所知道的每一种编程语言中,(int)(TRUE) == 1并且(int)(FALSE) == 0

于 2013-10-25T19:45:19.823 回答
1

由于我所知道的几乎每个系统都使用 IEEE-754 表示浮点数,因此您可以只依赖它的行为(即0.0 / 0.0NaNNaN != NaN。伪 C (-Java, ...) 如下:

float oneOrNAN = (float)(x) / (float)(x);
return oneOrNAN == oneOrNAN;
于 2013-10-25T19:56:48.820 回答
0

就像我说的,我的问题描述不够清楚。当我说方程时,我指的是纯粹的代数方程。

我确实找到了一个可接受的解决方案:Y = X/(X - .001)

如果它为零,你会得到 0/-.001,这只是 0。任何其他数字,你会得到 5/4.999,这对于我的特定情况来说足够接近 1。

然而,这很有趣:

!!x  

谢谢你的提示!

于 2013-10-26T21:41:41.120 回答