stackoverflow错误:检查数字是偶数还是奇数没有%或/运算符

时间:2013-02-17 16:47:55

标签: java

//在没有/或%运算符的情况下检查数字是偶数还是奇数。

public class EvenOrOdd {

    public static int CheckEvenOrOdd(int num) {
        if (num > 2) {
            int number = num - 2;
            num = CheckEvenOrOdd(number);
        }
        return num;
    }

    public static void main(String[] args) {
        int num = CheckEvenOrOdd(5322221);
        if (num == 1) {
            System.out.println("Odd number");
        } else {
            System.out.println("Even number");
        }
    }

}

我将堆栈大小定义为200m为-xss200m,但如果number大于5322221,则此程序会出现OutOfMemory错误和StackOverflow错误。

建议如何解决这个问题,找出数字是偶数还是奇数。

2 个答案:

答案 0 :(得分:16)

您可以使用每个奇数在其二进制表示的末尾都有1的事实,因此它看起来像???????1其中?可以是0或1.这是如何你可以用二进制AND来检查它 - > &

public static boolean isEven(int num) {
    return (num & 1) == 0;
}

它的工作原理如下:

为奇数

          ????????1 -> any odd number
          000000001 -> one
AND       ---------
result    000000001 -> one

表示偶数

          ????????0 -> any even number
          000000001 -> one
AND       ---------
result    000000000 -> zero

答案 1 :(得分:3)

我在一两天前问了一个类似的问题。看看这篇文章:What does this boolean return mean?

有效地,使用这种表示法:

private static boolean isEven(int number)
{
    return (number & 1) == 0;
}

&是一个按位运算符。有关它们的更多信息,请访问:Bitwise Operators