在这个问题中,我们给一个数组一个数字 N。我们的任务是检查这个数字是邪恶数字还是邪恶数字。
邪恶数: 它是一个正数,在其二进制展开中有偶数个 1。
示例: 5、17
可恶数: 它是一个正数,在其二进制扩展中具有奇数个 1。
示例: 4、6
输入: N = 65
输出: 邪恶数字
解释:
65 的二进制展开:1000001
解决方法:
该问题的一个简单解决方案是找到数字的二进制展开式,然后计算展开式中 1 的数量。如果计数是偶数,则该数字是邪恶的数字,否则它是可憎的数字。
#include <iostream> using namespace std; int isEvilNumber(int n) { int count = 0; while (n != 0) { int r = n % 2; if(r == 1) count++; n = n / 2; } if (count % 2 == 0) return 1; else return 0; } int main(void) { int num = 2049; if (isEvilNumber(num) ) cout<<"号码 "<<num<<" is an Evil Number"; else cout<<"号码 "<<num<<" is an Odious Number"; return 0; }
号码 2049 is an Evil Number