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

启动你的职业生涯

完成课程获得认证

开始学习
广告