用 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

更新于:2019-10-22

328 次访问

开启你的 职业生涯

完成课程即可获得认证

开始学习
广告