//在没有/或%运算符的情况下检查数字是偶数还是奇数。
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错误。
建议如何解决这个问题,找出数字是偶数还是奇数。
答案 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