Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 두 숫자에 대한 가장 왼쪽의 유사하지 않은 비트 위치 찾기

<시간/>

이 문제에서는 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