【问题标题】:stackoverflow error : check if number is even or odd without % or / operator [duplicate]stackoverflow 错误:在没有 % 或 / 运算符的情况下检查数字是偶数还是奇数
【发布时间】:2013-02-02 03:00:28
【问题描述】:

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

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 错误。

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

【问题讨论】:

  • 您可以避免内存问题,使用您当前的实现,通过将其从递归更改为迭代。另外,请考虑按位运算符。
  • 您可以使用& 1 来检查它是偶数还是奇数。 There was a question about this recently
  • 你可以实现 - if ( (number % 2) == 0) { System.out.println("Even number"); } else { System.out.println("奇数"); }

标签: java


【解决方案1】:

您可以使用一个事实,即每个奇数在其二进制表示的末尾都有1,因此它看起来像???????1,其中? 可以是 0 或 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

【讨论】:

  • 太棒了......这真是太棒了......这段代码没有内存问题......
【解决方案2】:

一两天前我问了一个类似的问题。看这个帖子:What does this boolean return mean?

有效地,使用这个符号:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    • 2015-05-31
    • 2023-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多