在 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
广告