在 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 次瀏覽

開啟您的職業生涯

完成課程後獲得認證

開始
廣告