我需要编写一个采用正整数x的算法。如果整数x为0,则算法返回0.如果是任何其他数字,则算法返回1.
这是一个问题。我需要将算法压缩成一个等式。即没有条件。基本上,如果x为零,我需要一个等于0的等式,如果x> 0则需要等于1。 0
编辑:根据我的评论如下。我意识到我不够清楚。我正在将公式输入到我无法控制的系统中,因此它们具有奇怪的限制。
然而,我学到了一些可能在将来有用的技巧!
答案 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.0
是NaN
和NaN != 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
感谢您的提示!