0和任何其他x的算法

时间:2013-10-25 19:41:15

标签: algorithm math

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

这是一个问题。我需要将算法压缩成一个等式。即没有条件。基本上,如果x为零,我需要一个等于0的等式,如果x> 0则需要等于1。 0

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

然而,我学到了一些可能在将来有用的技巧!

5 个答案:

答案 0 :(得分:6)

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

!!x

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

希望这有帮助!

答案 1 :(得分:3)

尝试return (int)(x > 0)

我知道的每种编程语言(int)(TRUE) == 1(int)(FALSE) == 0

答案 2 :(得分:3)

假设32位整数:

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

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

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

答案 3 :(得分:1)

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

float oneOrNAN = (float)(x) / (float)(x);
return oneOrNAN == oneOrNAN;

答案 4 :(得分:0)

就像我说的那样,我在问题描述中不够清楚。当我说方程式时,我的意思是纯粹的代数方程式。

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

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

然而,这很有趣:

!!x  

感谢您的提示!