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

C++에서 [0, n] 범위에 1개의 세트 비트만 있는 숫자의 개수

<시간/>

우리에게 숫자가 주어지고 작업은 0 범위에서 주어진 숫자까지 숫자의 개수를 계산하는 것입니다. num은 정확히 하나의 세트 비트를 가집니다.

이진수의 세트 비트는 1로 표시됩니다. 정수 값의 이진수를 계산할 때마다 0과 1의 조합으로 구성됩니다. 따라서 컴퓨터 용어로 1자리를 세트비트라고 합니다.

입력 - 정수 숫자 =15

출력 − [0, 15] 범위에서 1 세트 비트만 있는 숫자의 개수는 − 4입니다.

설명 - 주어진 숫자는 15이므로 범위는 0-15입니다. 이제 4자리 숫자를 계산하세요.

-

에 대한 이진수

0 -> 0000 =0 설정 비트, 1 -> 0001 =1 설정 비트, 2 -> 0010 =1 설정 비트, 3 -> 0011 =2 설정 비트, 4 -> 0100 =1 설정 비트, 5 -> 0101 =2비트 설정, 6 -> 0110 =2비트 설정, 7 -> 0111 =3비트 설정, 8 -> 1000 =1비트 설정, 1 -> 1001 =2비트 설정, 10 -> 1010 =2비트 설정, 11 -> 1011 =3비트 설정, 12 -> 1100 =2비트, 13 -> 1101 =3비트, 14 -> 1110 =3비트, 15 -> 1111 =4비트. 이제 정확히 하나의 세트 비트가 있는 숫자를 선택하고 1, 2, 4 및 8입니다.

입력 - 정수 숫자 =4

출력 − [0, 15] 범위에서 1 세트 비트만 있는 숫자의 개수는 − 3

설명 - 주어진 숫자는 4이므로 범위는 0-4입니다. 이제 4자리 이진수를 계산하십시오.

-

에 대한 번호

0 -> 0000 =0 설정 비트, 1 -> 0001 =1 설정 비트, 2 -> 0010 =1 설정 비트, 3 -> 0011 =2 설정 비트, 4 -> 0100 =1 설정 비트. 이제 정확히 하나의 세트 비트가 있는 숫자를 선택하고 1, 2 및 4입니다.

아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.

주어진 문제를 해결하기 위한 여러 가지 접근 방식, 즉 순진한 접근 방식과 효율적인 접근 방식이 있을 수 있습니다. 먼저 순진한 접근 방식을 살펴보겠습니다. .

  • 번호를 입력하고 추가 처리를 위해 함수에 전달합니다.

  • 비트가 정확히 1인 범위에 있는 숫자의 개수를 저장하기 위해 임시 변수 개수를 가져옵니다.

  • 숫자까지 i에서 1까지 FOR 루프 시작

  • 루프 내에서 설정된 비트 수를 반환하는 함수인 ' __builtin_popcount(i)'를 사용하여 임시 변수를 설정합니다.

  • IF temp =1을 확인한 다음 카운트를 증가시킵니다.

  • 반품 횟수

  • 결과 인쇄

효율적인 접근

  • 번호를 입력하고 추가 처리를 위해 함수에 전달합니다.

  • 비트가 정확히 1인 범위에 있는 숫자의 개수를 저장하기 위해 임시 변수 개수를 가져옵니다.

  • temp에서 temp까지 루프 시작 <=number

  • 루프 내에서 카운트를 1씩 증가시키고 temp를 temp * 2로 설정

  • 반품 횟수

  • 결과 인쇄

예(순진한 접근 방식)

#include <iostream>
using namespace std;
//function to Count of numbers having only 1 set bit in the range [0, n]
int set_bits(int number){
   int count = 0;
   for (int i = 1; i <= number; i++){
      int temp = __builtin_popcount(i);
      if (temp == 1){
         count++;
      }
   }
   return count;
}
int main(){
   int number = 15;
   cout<<"Count of numbers having only 1 set bit in the range [0, "<<number<<"] are: "<<set_bits(number);
   return 0;
}

출력

위의 코드를 실행하면 다음 출력이 생성됩니다 -

Count of numbers having only 1 set bit in the range [0, 15] are: 4

예(효율적인 접근)

#include <iostream>
using namespace std;
//function to Count of numbers having only 1 set bit in the range [0, n]
int set_bits(int number){
   int count = 0;
   int temp = 1;
   while(temp <= number){
      count++;
      temp = temp *2;
   }
   return count;
}
int main(){
   int number = 15;
   cout<<"Count of numbers having only 1 set bit in the range [0, "<<number<<"] are: "<<set_bits(number);
   return 0;
}

출력

위의 코드를 실행하면 다음 출력이 생성됩니다 -

Count of numbers having only 1 set bit in the range [0, 15] are: 4