C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++でビットを再配置して数を最大化します


問題の説明

符号なしの数が与えられた場合、与えられた符号なしの数のビットを使用して形成できる最大数を見つけます

入力番号が8の場合、その2進表現は-

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

  1. C++で配列の中央値を最大化する

    問題の説明 N個の要素の配列arr[]とK

  2. C++でkセットビットの数を最大化するために必要な最小フリップ。

    問題の説明 2つの数値nとkが与えられた場合、結果の数値が正確にkセットビットになるようにビットを反転することにより、指定された数値を最大化するために必要な最小の反転数を見つける必要があります。入力は、k