在 C++ 中找到具有 n 个设置位和 m 个未设置位的最大数字


在这个问题中,我们给定两个整数值,n 和 m。我们的任务是找到在数字的二进制表示中具有 n 个设置位和 m 个未设置位的最大数字

让我们举个例子来理解这个问题

Input : n = 3, m = 1
Output : 14

说明 -

Largest number will have 3 set bits and then 1 unset bit.
(1110)2 = 14

解决方案方法

解决这个问题的一个简单方法是找到由 (n+m) 个设置位组成的数字。从此数字中,从末尾 (LSB) 关闭 m 个比特。要创建一个具有 (n+m) 个设置位的数字,

$$(1\ll(n+m))-1$$

然后切换 m 位并返回数字。

示例

程序来说明我们解决方案的工作原理

#include <iostream>
using namespace std;
int findlargestNumber(int n, int m){
   int maxNum = (1 << (n + m)) - 1;
   if (m == 0)
      return maxNum;
   int number = (1 << m) - 1;
   return (maxNum ^ number);
}
int main(){
   int n = 5,
   m = 2;
   cout<<"The largest number with "<<n<<" set bits and "<<m<<" unset bits is "<<findlargestNumber(n, m);
   return 0;
}

输出

The largest number with 5 set bits and 2 unset bits is 124

更新日期: 2022 年 1 月 28 日

131 次浏览

开启你的 职业

完成课程即可获得认证

开始
广告