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

Lal*_*pta 2 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");
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

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

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

Psh*_*emo 16

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

public static boolean isEven(int num) {
    return (num & 1) == 0;
}
Run Code Online (Sandbox Code Playgroud)

它的工作原理如下:

对于奇数

          ????????1 -> any odd number
          000000001 -> one
AND       ---------
result    000000001 -> one
Run Code Online (Sandbox Code Playgroud)

对于偶数

          ????????0 -> any even number
          000000001 -> one
AND       ---------
result    000000000 -> zero
Run Code Online (Sandbox Code Playgroud)