lightoj-1182 - Parity(位运算)
1182 - Parity
PDF (English) Statistics Forum
Time Limit: 0.5 second(s) Memory Limit: 32 MB
Given an integer n, first we represent it in binary. Then we count the number of ones. We say n has odd parity if the number of one's is odd. Otherwise we say n has even parity. 21 = (10101)2 has odd parity since the number of one's is 3. 6 = (110)2 has even parity.
Now you are given n, we have to say whether n has even or odd parity.
Input
Input starts with an integer T (≤ 1000), denoting the number of test cases.
Each case contains an integer n (1 ≤ n < 231).
Output
For each case, print the case number and 'odd' if n has odd parity, otherwise print 'even'.
Sample Input
Output for Sample Input
2
21
6
Case 1: odd
Case 2: even
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; int counter(int num){ int a = 0x55555555; int b = 0x33333333; int c = 0x0f0f0f0f; int d = 0x00ff00ff; int e = 0x0000ffff; num = (num&a)+((num>>1)&a); num = (num&b)+((num>>2)&b); num = (num&c)+((num>>4)&c); num = (num&d)+((num>>8)&d); num = (num&e)+((num>>16)&e); return num; } int main(){ int T,n; scanf("%d",&T); for(int t=1;t<=T;t++){ scanf("%d",&n); printf("Case %d: ",t); printf(counter(n)%2==0?"even\n":"odd\n"); } return 0; }