在这里,我们将看到一个数字是否为Bleak。如果一个数字不能表示为正数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