C++中二進位制表示中含m個1和m-1個0的最大數


在本教程中,我們將編寫一個程式,查詢具有m個1和m-1個0的最大數。

讓我們看看解決問題的步驟。

  • 分別用2和1初始化兩個變數bits和result。
  • 編寫一個從1迭代到n的迴圈。
    • 使用pow(2, bits) - 1) * (pow(2, bits - 1)更新迭代變數的值。
    • 如果迭代變數小於n,則使用i更新result。
    • 遞增bits計數。
  • 返回result。

示例

讓我們看看程式碼。

 線上演示

#include <bits/stdc++.h>
using namespace std;
long long getTheNumber(long long n) {
   long bits = 2;
   long long result = 1;
   long long i = 1;
   while (i < n) {
      i = (int)(pow(2, bits) - 1) * (pow(2, bits - 1));
      if (i < n) {
         result = i;
      }
      bits++;
   }
   return result;
}
int main() {
   long long n = 654;
   cout << getTheNumber(n) << endl;
   return 0;
}

輸出

如果執行上面的程式碼,則會得到以下結果。

496

結論

如果您在本教程中有任何疑問,請在評論區提出。

更新於:2021年4月9日

瀏覽量:145

啟動你的職業生涯

完成課程獲得認證

開始學習
廣告