Thread: FAQ: How to test whether integer is even or odd

  1. #1
    Registered User
    Join Date
    Nov 2002
    Posts
    11

    Question FAQ: How to test whether integer is even or odd

    Hi. I need to write a function that tests whether an integer is even or not. This is how far I've got. I wasn't sure if its best to use an 'if' statement in the function.

    Code:
    /* a function that tests whether an integer is even, returning a true or false
       answer */
    
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
      int n = 0;
    
      cout << "Enter a number: ";
      cin >> n;
    
      cout << test(n) << endl;
    
      return 0;
    }
    
    int test(int n)
    {
      if (n
    cheers.

  2. #2
    Redundantly Redundant RoD's Avatar
    Join Date
    Sep 2002
    Location
    Missouri
    Posts
    6,331
    mod by two.

    variable = variable % 2;

  3. #3
    Code Goddess Prelude's Avatar
    Join Date
    Sep 2001
    Posts
    9,897
    Code:
    #include <iostream>
    
    int main()
    {
      int val;
    
      std::cout<<"Enter a number: ";
      std::cin>> val;
    
      if ( val % 2 == 0 )
        std::cout<< val <<" is even"<<std::endl;
      else
        std::cout<< val <<" is odd"<<std::endl;
    }
    -Prelude
    My best code is written with the delete key.

  4. #4
    Programming Sex-God Polymorphic OOP's Avatar
    Join Date
    Nov 2002
    Posts
    1,078
    Or, if you want to optimize just do:

    Value & 1

    if the result of the expression is true then the number was odd, if false, then the number was even

  5. #5
    Redundantly Redundant RoD's Avatar
    Join Date
    Sep 2002
    Location
    Missouri
    Posts
    6,331
    hmm, both seem about the same imo, i had only ever learned the modulous way of doing it.

  6. #6
    Programming Sex-God Polymorphic OOP's Avatar
    Join Date
    Nov 2002
    Posts
    1,078
    Bitwise operations are faster than division, multiplication, addition, subtraction because it's just a quick check on the bits.

  7. #7
    Redundantly Redundant RoD's Avatar
    Join Date
    Sep 2002
    Location
    Missouri
    Posts
    6,331
    thnx for the knowledge.

  8. #8
    Registered User
    Join Date
    Nov 2002
    Posts
    11
    I tried the following:

    Code:
    /* a function that tests whether an integer is even, returning a true or false
       answer */
    
    #include <iostream>
    
    using namespace std;
    
    int evenTest(int);
    
    int main()
    {
      int n = 0;
    
      cout << "Enter a number: ";
      cin >> n;
    
      cout << evenTest(n) << endl;
    
      return 0;
    }
    
    int evenTest(int n)
    {
      if (n % 2 == 0)
        cout << n << " is even" << endl;
    else
        cout << n << " is odd" << endl;
    }
    It generates the following output:

    Code:
    Enter a number: 10
    10 is even
    98476
    Why is 98476 generated?
    Also, Polymorphic OOP, how would I implement Value & 1 ?

  9. #9
    Programming Sex-God Polymorphic OOP's Avatar
    Join Date
    Nov 2002
    Posts
    1,078
    It's result is 1 if it's odd and 0 if it's even

    so

    Code:
    std::cout << "Value is " << ( Value & 1 ? "odd" : "even" );

  10. #10
    Programming Sex-God Polymorphic OOP's Avatar
    Join Date
    Nov 2002
    Posts
    1,078
    Originally posted by giggsy
    Why is 98476 generated?
    Because you are "cout"ing the value that evenTest returns (which is garbage cuz you didn't return anything.

    What you should do is:

    Code:
    /* a function that tests whether an integer is even, returning a true or false
       answer */
    
    #include <iostream>
    
    using namespace std;
    
    bool evenTest(int);
    
    int main()
    {
      int n = 0;
    
      cout << "Enter a number: ";
      cin >> n;
    
      cout << n << " is " << ( evenTest(n) ? "even" : "odd" ) << endl;
    
      return 0;
    }
    
    inline bool evenTest(int n)
    {
     return n % 2 == 0;
    }

  11. #11
    I lurk
    Join Date
    Aug 2002
    Posts
    1,361
    Originally posted by giggsy
    I tried the following:

    Code:
    /* a function that tests whether an integer is even, returning a true or false
       answer */
    
    #include <iostream>
    
    using namespace std;
    
    int evenTest(int);
    
    int main()
    {
      int n = 0;
    
      cout << "Enter a number: ";
      cin >> n;
    
      cout << evenTest(n) << endl;
    
      return 0;
    }
    
    int evenTest(int n)
    {
      if (n % 2 == 0)
        cout << n << " is even" << endl;
    else
        cout << n << " is odd" << endl;
    }
    It generates the following output:

    Code:
    Enter a number: 10
    10 is even
    98476
    Why is 98476 generated?
    Also, Polymorphic OOP, how would I implement Value & 1 ?
    That random number is generated because you're printing the result of a function which is supposed to return an int, but actually returns nothing.

  12. #12
    Skunkmeister Stoned_Coder's Avatar
    Join Date
    Aug 2001
    Posts
    2,572
    Code:
    const char* EvenOrOdd( int value)
    {
         if(value&1) return"odd";
         return "even";
    }
    Free the weed!! Class B to class C is not good enough!!
    And the FAQ is here :- http://faq.cprogramming.com/cgi-bin/smartfaq.cgi

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Looking for constructive criticism
    By wd_kendrick in forum C Programming
    Replies: 16
    Last Post: 05-28-2008, 09:42 AM
  2. No Match For Operator+ ???????
    By Paul22000 in forum C++ Programming
    Replies: 24
    Last Post: 05-14-2008, 10:53 AM
  3. My C++ test is COMING!!...
    By [Z-D] in forum C++ Programming
    Replies: 52
    Last Post: 12-01-2006, 08:02 PM
  4. FAQ how do i convert a string to an integer?? (C)
    By Unregistered in forum FAQ Board
    Replies: 1
    Last Post: 12-02-2001, 05:03 PM