用 C++ 检查数字是否惨淡
在这里,我们将了解一个数字是否是惨淡的。一个数字被称为惨淡的,如果它不能表示为一个非负数 x 和 x 的位集计数之和。因此对于任何非负数 x,x + set_bit_count(x) 不等于 n。
概念非常简单,如果位集计数与数字不同,那么就是惨淡的,否则就不是惨淡的。
示例
#include <iostream> using namespace std; int set_bit_count(int x) { unsigned int bit_count = 0; while (x != 0) { x &= (x - 1); bit_count++; } return bit_count; } bool isBleakNumber(int n) { for (int i = 1; i < n; i++) if (i + set_bit_count(i) == n) return false; return true; } int main() { isBleakNumber(3) ? cout << "Yes\n" : cout << "No\n"; isBleakNumber(4) ? cout << "Yes\n" : cout << "No\n"; }
输出
No Yes
广告