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

C++에서 N보다 작은 이진 숫자의 개수

<시간/>

입력으로 정수 N이 주어집니다. 목표는 N보다 작고 이진 형식으로 표시되는 정수의 개수를 찾는 것입니다. 예를 들어 입력 N이 12이면 12보다 작은 숫자는 1,10,11이며 이진수는 0과 1을 숫자로 포함합니다. 답은 3입니다.

예를 들어

입력

N=100

출력

Count of Binary Digit numbers smaller than N are − 4

설명

The Binary numbers less than 100 are − 1, 10, 11, 100

입력

N=120

출력

Count of Binary Digit numbers smaller than N are: 7

설명

The Binary numbers less than 100 are : 1, 10, 11, 100, 101, 110, 111

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

이 접근법에서 우리는 정수 벡터 vec를 사용할 것입니다. 이를 위해 먼저 1을 누릅니다. 이제 다음 이진수를 생성하기 위해 vec(초기 1)에서 마지막 숫자(temp)를 추출합니다. 그런 다음 이진수로 temp*10 및 temp*10+1을 사용하여 다음을 생성합니다( 1,10,11,100,110,111….). vec에서 숫자를 팝하고 N보다 작으면 카운트를 증가시킵니다.

  • 정수 N을 입력으로 받습니다.

  • Smaller_N(int N) 함수는 N을 취하고 N보다 작은 이진 숫자의 개수를 반환합니다.

  • 초기 카운트를 0으로 합니다.

  • 0과 1만 포함하는 정수를 저장하기 위해 정수 벡터 vec를 사용합니다.

  • vec.push_back(1)을 사용하여 벡터에 1을 추가합니다.

  • while 루프를 사용하여 vec[ ]를 탐색하고 마지막으로 푸시된 temp=vec.back()을 꺼냅니다. 그리고 vec에서 제거합니다.

  • temp<=N이면 count를 증가시키고 다음 이진 정수를 temp*10 및 temp*10+1로 생성하고 vec에 추가합니다.

  • while이 끝나면 결과적으로 카운트를 반환합니다.

#include <bits/stdc++.h>
using namespace std;
int Smaller_N(int N){
   int count = 0;
   vector<int> vec;
   vec.push_back(1);
   while (!vec.empty()){
      int temp = vec.back();
      vec.pop_back();
      if (temp <= N){
         count++;
         int temp_2 = temp * 10;
         vec.push_back(temp_2);
         vec.push_back(temp_2 + 1);
      }
   }
   return count;
}
int main(){
   int N = 1000;
   cout<<"Count of Binary Digit numbers smaller than N are: "<<Smaller_N(N);
   return 0;
}

출력

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

Count of Binary Digit numbers smaller than N are: 8