在 C++ 中通过重新排列位来使数字最大化
问题陈述
给定一个无符号数字,求出一个无符号数字的所有位都可以用来构成的最大数字
如果输入的数字是 8,那么它的二进制表示为−
00000000000000000000000000001000
为使其最大化,将 MSB 设置为 1。那么数字变为 2147483648,其二进制表示为−
10000000000000000000000000000000
算法
1. Count number of set bits in the binary representation of a given number 2. Find a number with n least significant set bits 3. shift the number left by (32 – n)
示例
#include <bits/stdc++.h> using namespace std; unsigned getMaxNumber(unsigned num){ int n = __builtin_popcount(num); if (n == 32) { return num; } unsigned result = (1 << n) - 1; return (result << (32 - n)); } int main(){ unsigned n = 8; cout << "Maximum number = " << getMaxNumber(n) << endl; return 0; }
输出
当您编译并执行以上程序时,它生成以下输出−
Maximum number = 2147483648
广告