C++ 中使用给定数字的置位表示的最小数字


问题表述

给定一个无符号数字,找出使用给定无符号数字的二进制位所能形成的最小数字。

示例

如果输入 = 10,则答案为 3

10 的二进制表示为 1010,具有 2 个置位的最小数为 0011,即 3

算法

1. Count the number of set bits.
2. (Number of set bits) ^ 2 – 1 represents the minimized number)

示例

 实时演示

#include <bits/stdc++.h>
using namespace std;
int getSetBits(int n) {
   int cnt = 0;
   while (n) {
      ++cnt;
      n = n & (n - 1);
   }
   return cnt;
}
int getMinNumber(int n){
   int bits = getSetBits(n);
   return pow(2, bits) - 1;
}
int main() {
   int n = 10;
   cout << "Minimum number = " << getMinNumber(n) << endl;
   return 0;
   return 0;
}

当你编译并执行上面的程序时,它会生成以下输出

输出

Minimum number = 3

更新日期:2019 年 12 月 23 日

160 次浏览

开启你的 职业道路

完成课程获得认证

开始
广告