查詢 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
廣告
資料結構
網路
關係型資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP