Processing math: 100%

在 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(n+m))1

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

示例

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

Open Compiler
#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; }

Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.

输出

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

更新日期: 2022 年 1 月 28 日

131 次浏览

开启你的 职业

完成课程即可获得认证

开始
广告