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

C++에서 비트가 교차하는 이진수

<시간/>

양의 정수가 있다고 가정하고 비트가 교차하는지 확인해야 합니다. 따라서 인접한 두 비트는 항상 다른 값을 갖습니다.

따라서 입력이 10과 같으면 10의 이진 표현이 1010이므로 출력은 True가 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • p :=n AND 1
  • n <2이면 -
    • 참을 반환
  • n :=n/2
  • n이 0이 아닌 동안 −
    • c :=n AND 1
    • c XOR p가 0과 같으면 -
      • 거짓 반환
    • p :=c
    • n :=n/2
  • 참을 반환

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

예시

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   bool hasAlternatingBits(int n) {
      bool p=n&1;
      bool c;
      if(n<2)
         return true;
      n>>=1;
      while(n){
         c=n&1;
         if(c^p==0)
            return false;
         p=c;
         n>>=1;
      }
      return true;
   }
};
main(){
   Solution ob;
   cout << (ob.hasAlternatingBits(10));
}

입력

10

출력

1