C++でもう1つのセットビット数を持つ次に大きい整数
数値nが与えられているので、バイナリ表現でnよりも1つ多いセットビットを使用して、nよりも大きい数値を見つける必要があります。
2進表現の数字1はセットビットと呼ばれます。
例を見てみましょう。
入力
124
出力
125
アルゴリズム
-
番号を初期化しますn 。
-
設定されたビット数のカウントを取得する関数を記述します。
-
n + 1で反復変数を初期化します 。
-
無限ループを記述します。
-
nより大きい数値のセットビット数を確認します 。
-
見つけたら番号を返します。
-
実装
以下は、C++での上記のアルゴリズムの実装です
#include <bits/stdc++.h> using namespace std; int getSetBitsCount(int n) { int count = 0; while (n) { if (n % 2 == 1) { count += 1; } n /= 2; } return count; } int getNextGreaterElementWithSameSetBits(int n) { int setBitsCount = getSetBitsCount(n); int i = n + 1; while (true) { if (setBitsCount + 1 == getSetBitsCount(i)) { return i; } i += 1; } } int main() { int n = 124; cout << getNextGreaterElementWithSameSetBits(n) << endl; return 0; }
出力
上記のコードを実行すると、次の結果が得られます。
125
-
数値に代替パターンのビットがあるかどうかを確認します-C++で1を設定します
整数nがあるとしましょう。問題は、この整数が2進数に相当する代替パターンを持っているかどうかを確認することです。代替パターンは101010…を意味します。 アプローチは次のようなものです。同等の2進数を使用して各桁をチェックし、2つ連続している場合は偽を返し、そうでない場合は真を返します。 例 #include <iostream> using namespace std; bool hasAlternatePattern(unsigned int n) { int previous = n % 2; n = n/2; &nbs
-
C++で整数の1の補数を見つける
このセクションでは、整数の1の完全なものを見つける方法を説明します。補数演算子を使用してこのタスクを非常に高速に実行できますが、32ビットの補数値(4バイト整数)になります。ここでは、nビット数の補数が必要です。 22という数値があるとします。2進数に相当するものは10110です。補完された値は01001で、これは9と同じです。ここで問題が発生します。この値を見つける方法は?最初に、与えられた数のビット数を見つける必要があります。カウントがcであると仮定します(ここでは、22の場合はc =5)。 51を作成する必要があります。したがって、これは11111になります。これを行うには、1を左にc