C++ 中利用给定数的位求最小数

c++server side programmingprogramming

问题描述

给定一个无符号数,求用该数的位可以组成的最小数。

示例

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

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

算法

1. 计算位的数量。
2. (位的数量)^2 - 1 表示最小数)

示例

#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

相关文章