大家好,又见面了,我是全栈君。
非常好玩的一道题。能够熟悉下位操作实现和玩一玩bitset这个容器
Description
N as the sum of the bits in binary representation computed modulo two. As an example, the number 21 = 10101 has three 1s in its binary representation so it has parity 3 (mod 2), or 1. In this problem you have to calculate the parity of an integer
1 <= I <= 2147483647 (2^31-1). Then, let start to work…
Input specification
I and the end of the input is indicated by a line where
I = 0 that should not be processed.
Output specification
I in the input you should print one line in the form ”
The parity of B is P (mod 2).” where
B is the binary representation of
I.
Sample input
1210210
Sample output
The parity of 1 is 1 (mod 2).The parity of 10 is 1 (mod 2).The parity of 1010 is 2 (mod 2).The parity of 10101 is 3 (mod 2).
使用bitset来实现。注意bitset的高低为存储顺序,是底位到高位。索引i右0到大的:
void NumericParity() { int n = 0; bitset<32> bi; while (cin>>n && n) { bi = n; cout<<"The parity of "; bool flag = false; for (int i = bi.size() - 1; i >= 0 ; i--) { flag |= bi.test(i); if (flag) cout<<bi[i]; } cout<<" is "<<bi.count()<<" (mod 2).\n"; } }
自家自制的位操作:
static bool biNum[32]; int intTobi(int n) { int i = 0, c = 0; while (n) { c += n % 2; biNum[i++] = n % 2; n >>= 1; } return c; } void NumericParity2() { int n = 0; while (cin>>n && n) { fill(biNum, biNum+32, false); cout<<"The parity of "; int c = intTobi(n); bool flag = false; for (int i = 31; i >= 0 ; i--) { flag |= biNum[i]; if (flag) cout<<biNum[i]; } cout<<" is "<<c<<" (mod 2).\n"; } }
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/115818.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...