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

C++에서 0과 1만 있는 길이가 N인 이진 문자열의 수를 센다.

<시간/>

우리에게 num이라는 숫자가 주어지고 작업은 o와 1만 포함하는 주어진 숫자 num을 통해 형성할 수 있는 이진 문자열의 개수를 계산하는 것입니다.

이진법은 숫자 표현 기법의 한 유형입니다. 가장 대중적이고 디지털 시스템에서 사용됩니다. 이진 시스템은 두 가지 작동 상태 또는 가능한 조건만 있는 장치로 나타낼 수 있는 이진 양을 나타내는 데 사용됩니다. 예를 들어 스위치에는 열림 또는 닫힘의 두 가지 상태만 있습니다.

이진 시스템에는 2개의 기호 또는 가능한 숫자 값, 즉 0과 1만 있습니다. 2개의 작동 상태 또는 가능한 조건만 있는 장치로 표시됩니다. 이진 문자열은 이진 값, 즉 0 또는 1을 포함하는 문자열입니다.

Input − num = 3
Output − count is 8

설명 - 길이가 3으로 형성될 수 있는 이진 조합은 총 8개이므로 개수는 8이므로 000, 111, 001,101, 100, 110, 011, 010입니다.

Input − num = 2
Output − count is 4

설명 - 길이가 2로 형성될 수 있는 이진 조합은 총 4개이므로 개수는 00, 11, 01,10이므로 개수는 4입니다.

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

  • 숫자가 임의의 자릿수일 수 있는 긴 유형의 숫자를 입력하십시오.

  • mod 값을 (long long)(le9 + 7)

    로 계산합니다.
  • 개수를 계산하는 함수 만들기

  • count와 다른 변수 temp를 저장할 임시 변수를 선언하고 2로 초기화합니다.

  • 숫자를 temp =temp % mod로 설정

  • num> 0

    동안 루프 시작
  • IF num &1을 확인한 다음 count를 (count * temp)% mod

    로 설정합니다.
  • 숫자 =숫자>> 1

    설정
  • 설정 온도 =(온도 * 온도) % 모드

  • 반품 횟수

  • 결과를 인쇄하십시오.

예시

#include <iostream>
using namespace std;
#define ll long long
#define mod (ll)(1e9 + 7)
// An iterative function to find (x^y)%p in O(log y)
ll power(ll x, ll y, ll p){
   ll result = 1;
   x = x % p; // Update x if it is more than or
   // equal to p
   while (y > 0){
      // If y is odd, multiply x with result
      if (y & 1){
         result = (result * x) % p;
      }
      // y must be even now
      y = y >> 1; // y = y/2
      x = (x * x) % p;
   }
   return result;
}
// Function to count the number of binary strings
ll countbstring(ll num){
   int count = power(2, num, mod);
   return count;
}
int main(){
   ll num = 3;
   cout <<"count is: "<<countbstring(num);
   return 0;
}

출력

위의 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다 -

count is: 8