给定无符号数,请使用给定无符号数的位找到可以形成的最小数。
如果输入= 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