양의 정수 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