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

C++의 숫자에서 K번째 세트 비트의 위치


이 문제에서 두 개의 정수 N과 K가 주어졌습니다. 우리의 임무는 K 번째 의 인덱스를 찾는 것입니다. 오른쪽에서 세어 숫자 N의 비트를 설정합니다.

세트 비트는 숫자의 이진 표현에서 확인됩니다. 이진 표현의 인덱싱은 오른쪽 방향에서 인덱스 0부터 시작하여 왼쪽으로 전파됩니다.

− 이진수 '011101'에서 오른쪽에서 인덱스 0에는 1이 있고 오른쪽에서 인덱스 1에는 0이 있는 식입니다.

이제 문제를 이해하기 위해 예를 들어보겠습니다.

입력 - N =6, K =2

출력 - 2

설명 − 6의 이진 표현은 0110입니다. 오른쪽에서 두 번째 세트 비트는 인덱스 2에 있습니다.

이 문제를 해결하려면 현재 비트가 설정되어 있는지 확인해야 합니다. 설정되어 있으면 K 값을 줄입니다. 모든 확인 후에 숫자 bt 1을 이동하고 다음 비트를 제공합니다. 수행된 교대 수를 유지합니다. K 값이 0이 되면 완료된 교대 수를 인쇄합니다.

예시

로직 구현을 보여주는 프로그램

#include <iostream>
using namespace std;
int FindIndexKthBit(int N, int K) {
   int index=0;
   while (N) {
      if (N & 1)
         K--;
      if (!K)
         return index;
      index++;
      N = N >> 1;
   }
   return -1;
}
int main() {
   int N = 12, K = 2;
   cout<<"The "<<K<<"th set bit of the number "<<N<<" is at index : \t";
   int index = FindIndexKthBit(N, K);
   if (index!=-1)
      cout<<index;
   else
      cout<<"\nsorry no index found";
   return 0;
}

출력

The 2th set bit of the number 12 is at index : 3