C++の2つの数値の左端の非類似ビットの位置を検索します
この問題では、num1とnum2の2つの数値が与えられます。私たちのタスクは、2つの数値の左端の非類似ビットの位置を見つけることです。それぞれのバイナリ表現で両方の数値が同じではない最初のビットを出力する必要があります。ビットを見つけるには、両方の長さが同じである必要があります。これは、少ないビット数で数値の先頭に0を追加することによって行われます。
問題を理解するために例を見てみましょう
入力
num1 = 4, num2 = 7
出力
1
説明
4のバイナリ表現は100です
7のバイナリ表現は111です
最初のビットは同じではありません。
ソリューションアプローチ
この問題を解決するためのアプローチは、最初に2 (ビット差) を掛けて、両方の数値のビット数を等しくすることです。 。そして、ビットが異なる場所でのみ1を返す両方の数値のXORを取ります。したがって、このXORでは、最初の位置を見つけ、それに1を追加すると、必要な位置が得られます。
アルゴリズム
ステップ1 −小さい方に(2 ^(ビット長の差))だけを掛けて、数値のビットを等しくします。
ステップ2 −num1とnum2でXOR演算を実行します。
ステップ3 −ビット差は合計に等しい(bitCount --XORbitCount + 1)。
ソリューションの動作を説明するプログラム
例
#include <iostream> #include <math.h> using namespace std; int findmisMatchBit(int num1, int num2) { if (num1 == num2) return 0; int num1Size = floor(log2(num1)) + 1; int num2Size = floor(log2(num2)) + 1; int BitSizeDiff = abs(num1Size - num2Size); int maxBitSize = max(num1Size, num2Size); if (num1Size > num2Size) num2 *= pow(2, BitSizeDiff); else num1 *= pow(2, BitSizeDiff); int XOR = num1 ^ num2; int XORBitSize = floor(log2(XOR)) + 1; return (maxBitSize - XORBitSize + 1); } int main() { int num1 = 43, num2 = 765; cout<<"The position of leftmost dis-similar bit of the two number is "<<findmisMatchBit(num1, num2); return 0; }
出力
The position of leftmost dis-similar bit of the two number is 4
-
2つ以上(または配列)の数値のGCD用のC ++プログラム?
2つの数値の公約数は、両方の除数である数値です。 たとえば、12の約数は1、2、3、4、6、12です。18の約数は1、2、3、6、9、18です。したがって、12と18の公約数は1、2です。 、3、6。これらの中で最大のものは、おそらく当然のことながら、12と18のと呼ばれます。2つの整数aとbの最大公約数の通常の数学表記は、(a、b)で表されます。したがって、(12、18)=6です。 最大公約数は多くの理由で重要です。たとえば、2つの数値、つまりこれらの数値の倍数である最小の正の整数を計算するために使用できます。数値aとbの最小公倍数は、a * b *(a、b)として計算できます。 たと
-
2つ以上(または配列)の数値のGCD0のC++プログラム?
ここでは、3つ以上の数値の公約数を取得する方法を説明します。 2つの数値の公約数を見つけるのは簡単です。 3つ以上の数値のgcdを見つけたい場合は、gcdの結合法則に従う必要があります。たとえば、{w、x、y、z}のgcdを検索する場合は、{gcd(w、x)、y、z}、次に{gcd(gcd(w、x)、y)になります。 、z}、最後に{gcd(gcd(gcd(w、x)、y)、z)}。アレイを使用すると、非常に簡単に実行できます。 アルゴリズム gcd(a、b) begin if a is 0, then return b &n