여기서 우리는 숫자가 이진 표현에서 인접한 세트 비트를 가지고 있는지 볼 것입니다. 숫자 12에 두 개의 연속 1이 있다고 가정합니다(12 =1100).
이 유형의 숫자를 확인하는 아이디어는 매우 간단합니다. 숫자를 1비트로 이동한 다음 비트별 AND를 수행합니다. 비트 AND 결과가 0이 아닌 경우 연속 1이 있어야 합니다.
예
#include <iostream>
using namespace std;
bool hasConsecutiveOnes(int n) {
if((n & (n >> 1)) == 1){
return true;
}else{
return false;
}
}
int main() {
int num = 67; //1000011
if(hasConsecutiveOnes(num)){
cout << "Has Consecutive 1s";
}else{
cout << "Has No Consecutive 1s";
}
} 출력
Has Consecutive 1s