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