2

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

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 但如果数字大于 5322221,该程序会出现 OutOfMemory 错误和 StackOverflow 错误。

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

4

2 回答 2

16

您可以使用一个事实,即每个奇数在其二进制表示的末尾都有,1所以它看起来可以是 0 或 1。这是您可以使用二进制 AND 进行检查的方法 ->???????1?&

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
于 2013-02-17T16:53:21.963 回答
3

一两天前我问了一个类似的问题。看看这个帖子:这个布尔返回是什么意思?

有效地,使用这个符号:

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

& 是位运算符。可以在此处找到有关它们的更多信息:按位运算符

于 2013-02-17T16:54:42.397 回答