How to check even or odd number without divide by 2. :-
-------------------------------------------------------
here is a program that checks even/odd number without divide by two. Here is theory
let start with number, consider number table as :-
decimal numbers it's binary last digit ( LSB )
------------------ --------------- ------
1 -> odd 0001 1
2 -> even 0010 0
3 -> odd 0011 1
4 -> even 0100 0
5 -> odd 0101 1
6 -> even 0110 0
7 -> odd 0111 1
8 -> even 1000 0
9 -> odd 1001 1
10 -> even 1010 0
.
.
.
.
Now it is clear that in number table after every odd ( started from 1) there is an even number, and after every even there is odd number. And in ther binary form, LSB of odd is " 1 ", and LSB of even is " 0 ".
So by using bitwise "and" operation ( & ) with a char having LSB " 1 ", i.e.
0x01 ( 0000 0001 ) we can chack number's LSB is " 1 " or " 0 ". and from that we can determine even or odd. Here is a program :-
#include <iostream>
using namespace std;
bool evenodd(int num)
{
char *pch;
pch = (char*)(&num);
int i = (*pch) & (0x01);
if(i == 0)
{
return true;
}
else if(i == 1)
{
return false;
}
}
int main()
{
int i;
cout << "Enter integer to check even/odd : ";
cin >> i;
bool tf = evenodd(i);
if(tf == true)
{
cout << "even number" << endl;
}
else
{
cout << "odd number" << endl;
}
return 0;
}
OUTPUT of program :-
--------------------
[rahul@kaljayi Debug]$ ./prime-num
Enter integer to check even/odd : 1
odd number
[rahul@kaljayi Debug]$ ./prime-num
Enter integer to check even/odd : 3
odd number
[rahul@kaljayi Debug]$ ./prime-num
Enter integer to check even/odd : 5
odd number
[rahul@kaljayi Debug]$ ./prime-num
Enter integer to check even/odd : 4
even number
[rahul@kaljayi Debug]$ ./prime-num
Enter integer to check even/odd : 121212
even number
[rahul@kaljayi Debug]$ ./prime-num
Enter integer to check even/odd : 1212121
odd number
[rahul@kaljayi Debug]$ ./prime-num
Enter integer to check even/odd : 12121223
odd number
[rahul@kaljayi Debug]$