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

C++의 이진 문자열에서 짝수 십진수 값 하위 문자열 계산


0과 1의 문자열만 제공됩니다. 문자열은 왼쪽에서 오른쪽으로 읽는 이진수를 나타냅니다. 즉, 001은 1이 아니라 4입니다. 목표는 짝수 십진수를 나타내는 모든 하위 문자열을 찾는 것입니다.

모든 부분 문자열의 첫 번째 값을 확인하여 이를 수행합니다. 값이 0이면 숫자는 1이고 숫자는 홀수입니다. 이 sbstr[0]='0'이 있는 모든 하위 문자열은 10진수가 짝수이므로 length-i만큼 증가합니다.

예를 들어 이해합시다.

입력 - str="101"

출력 − 이진 문자열에서 짝수 십진수 값 하위 문자열의 개수는 − 2

입니다.

설명 − 가능한 부분 문자열:10, 11, 01, 0, 1 중 01은 2, 0은 0, 2는 짝수입니다.

입력 - str="111"

출력 − 이진 문자열에서 짝수 십진수 값 하위 문자열의 개수는 − 0

입니다.

설명 − 가능한 부분 문자열은 − 11,1이며 그 중 짝수는 없습니다.

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

  • 문자열 str은 0과 1로만 사용합니다.

  • str의 길이를 len=str.length()에 저장

  • count_even(string str, int length) 함수는 문자열과 그 길이를 가져와서 짝수 십진수를 형성하는 부분 문자열의 개수를 반환합니다.

  • FOR 루프를 사용하여 문자열 탐색

  • 인덱스 i=0에서 시작하여 i

  • str[i]=='0'이 있는 경우 시작하는 모든 하위 문자열이 10진수로 짝수임을 의미합니다.

  • 증분 수는 length-i입니다.

  • 결과로 카운트를 반환합니다.

예시

#include <bits/stdc++.h>
using namespace std;
int count_even(string str, int length){
   int count = 0;
   for (int i = 0; i < length; i++){
      if (str[i] == '0'){
         count += (length - i);
      }
   }
   return count;
}
int main(){
   string str = "00111";
   int len = str.length();
   cout<<"Count of even decimal value substrings in a binary string are: "<<count_even(str, len) << endl;
   return 0;
}

출력

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

Count of even decimal value substrings in a binary string are: 9