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

すべての奇数がバイナリ表現の最後にあるという事実を使用できるため、どこが 0 または 1 になるか1のように見え???????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
于 2013-02-17T16:53:21.963 に答える
3

1、2日前に同様の質問をしました。この投稿を見てください:このブール値の戻り値はどういう意味ですか?

事実上、この表記法を使用すると:

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

& はビット単位の演算子です。それらの詳細については、こちらを参照してください: Bitwise Operators

于 2013-02-17T16:54:42.397 に答える