이 문제에서는 num1과 num2라는 두 개의 숫자가 제공됩니다. 우리의 임무는 두 숫자에 대한 가장 왼쪽의 유사하지 않은 비트의 위치를 찾는 것입니다. 각각의 이진 표현에서 두 숫자에 대해 동일하지 않은 첫 번째 비트를 인쇄해야 합니다. 비트를 찾으려면 두 숫자의 길이가 같아야 합니다. 비트 수가 적은 숫자의 시작 부분에 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