查詢 C++ 中兩個數字最左邊的不同位的位置


在這個問題中,我們得到了兩個數字,num1 和 num2。我們的任務是找到這兩個數字最左邊不同的位的位置。我們需要列印在各自二進位制表示中,這兩個數字第一個不相同的位。為了找到這個位,這兩個數字的長度需要相同。這可以透過在位數較少的數字的開頭新增 0 來實現。

讓我們來看一個例子來理解這個問題:

輸入

num1 = 4, num2 = 7

輸出

1

解釋

4 的二進位制表示是 100

7 的二進位制表示是 111

第一位不同。

解決方案

解決這個問題的一種方法是首先透過將其乘以 2(位差) 來使兩個數字的位數相等。然後對兩個數字進行異或運算,這將僅在它們的位不同的位置返回 1。因此,在這個異或結果中,我們將找到第一個位置,然後加 1 就得到了所需的位置。

演算法

**步驟 1** - 透過僅將較小的數字乘以 (2 ^ (位長度差)) 來使數字的位數相等。

**步驟 2** - 對 num1 和 num2 執行異或運算。

**步驟 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

更新於:2021年3月16日

162 次瀏覽

開始您的 職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.