在 C++ 中小于 X 的最大数字,且至多有 K 个设置位


在本教程中,我们将编写一个程序来查找小于给定 x 的最大数字,且至多有 k 个设置位。

我们来看看解决这个问题的步骤。

  • 初始化数字 x 和 k。
  • 找到数字 x 中的设置位。
  • 编写一个循环,循环设置位计数 x - k。
    • 使用 x & (x - 1) 更新 x 的值。
  • 返回 x。

实例

我们来看看代码。

 实时演示

#include <bits/stdc++.h>
using namespace std;
int largestNumberWithKBits(int x, int k) {
   int set_bit_count = __builtin_popcount(x);
   if (set_bit_count <= k) {
      return x;
   }
   int diff = set_bit_count - k;
   for (int i = 0; i < diff; i++) {
      x &= (x - 1);
   }
   return x;
}
int main() {
   int x = 65, k = 2;
   cout << largestNumberWithKBits(x, k) << endl;
   return 0;
}

输出

如果您运行以上代码,则将获得以下结果。

65

结论

如果您对本教程有任何疑问,请在评论部分提及。

更新于:09-04-2021

66 次浏览

开启您的职业生涯

完成课程后获得认证

开始
广告