2013-02-17 70 views
2

//檢查數字是偶數還是奇數,沒有/或%運算符。stackoverflow錯誤:檢查號碼是偶數還是奇數沒有%或/運算符

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"); 
     } 
    } 

} 

我定義堆棧大小200米爲-xss200m但這個方案開啓了內存不足的錯誤和StackOverflow的錯誤,如果數量是大於5322221.

告知如何解決這個問題,找到數爲偶數或奇數。

+3

你可以避免內存問題,使用你當前的實現,通過改變它從遞歸到迭代。另外,考慮按位運算符。 – 2013-02-17 16:51:06

+2

您可以使用'&1'來檢查它是偶數還是奇數。 [最近有個問題](http://stackoverflow.com/questions/14905643/what-does-this-boolean-return-mean/14905686#14905686) – 2013-02-17 16:51:55

+0

你可以實現 - if((number%2) == 0) { System.out.println(「偶數」); } else { System.out.println(「Odd number」); } – user1428716 2013-02-17 16:55:36

回答

15

你可以在它的二進制表示的末尾使用一個事實,每個奇數有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 
+1

太棒了......這真是太棒了......這段代碼沒有內存問題.. – 2013-02-18 03:19:46

3

我在一兩天前問過類似的問題。看看這個帖子:What does this boolean return mean?

實際上,使用這個符號:

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

的&是位運算符。有關它們的更多信息可以在這裏找到:Bitwise Operators

相關問題