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

카운트 숫자는 C++의 이진 표현에서 모두 1입니다.

<시간/>

양의 정수 N이 주어집니다. 목표는 이진 표현에서 모두 1을 갖는 N보다 작거나 같은 숫자를 계산하는 것입니다. 예를 들어 1은 1, 3은 11, 7은 111, 15는 1111...

숫자를 보면 모두 2i-1입니다. 내가 시작하는 곳 1. n보다 작은 숫자를 확인하려면. 2i-1<=n인지 비교할 것입니다. 그런 다음 카운트를 증가시킵니다.

예를 들어 이해합시다.

입력 - N=15

출력 − 2진수에서 모두 1인 수 :4

설명 − 동일한 소수의 합인 숫자 − 숫자는 1 3 7 15가 됩니다.

입력 - N=50

출력 − 2진수에서 모두 1인 숫자 :5

설명 − 동일한 소수의 합인 숫자 −

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

  • 양의 정수 N을 취합니다.

  • allOnes(int n) 함수는 n을 입력으로 받아 모두 1인 숫자를 이진 표현으로 반환합니다.

  • 이러한 숫자에 대해 초기 변수 개수를 0으로 간주합니다.

  • for 루프를 사용하여 i=1에서 i<=n까지 순회합니다.

  • 각 i에 대해 pow(2,i)-1이 n보다 작거나 같으면. 증분 수.

  • for 루프의 끝에서 결과로 카운트를 반환합니다.

예시

#include <bits/stdc++.h>
using namespace std;
int allOnes(int n){
   int count = 0;
   for(int i=1;i<=n;i++){
      if(n>=pow(2,i)-1){
         count++;
         //cout<<" "<<pow(2,i)-1;
      }
   }
   return count;
}
int main(){
   int N=23;
   cout <<endl<< "Number having all 1's in binary : "<<allOnes(N);
   return 0;
}

출력

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

Number having all 1's in binary : 4