0부터 9까지의 숫자 문자열이 제공됩니다. 문자열은 10진수를 나타냅니다. 목표는 숫자 X보다 큰 십진수를 나타내는 모든 하위 문자열을 찾는 것입니다. 조건은 하위 문자열이 0으로 시작하지 않아야 한다는 것입니다. 즉, "2021", "02", "021"에서. "0"은 포함되지 않습니다.
모든 부분 문자열의 첫 번째 값을 확인하여 이를 수행합니다. 값이 0보다 크면 stoi()를 사용하여 정수로 변환하여 해당 인덱스에서 부분 문자열을 만들기 시작합니다. If substring>X 증분 카운트.
예를 들어 이해합시다.
입력 − str=”123” X=12
출력 − X보다 큰 숫자 값을 갖는 부분 문자열의 개수는 − 2
입니다.설명 하위 문자열> 12는 123과 23입니다.
입력 − str=”111” X=100
출력 − 이진 문자열에서 짝수 10진수 값 하위 문자열의 개수는 − 1
입니다.설명 111만 100보다 큽니다.
아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.
-
문자열 str은 숫자 문자열로만 사용합니다.
-
str의 길이를 len=str.length()에 저장
-
함수 Greater_X(string str, int x)는 문자열과 그 길이를 가져와서 X보다 큰 십진수를 형성하는 부분 문자열의 개수를 반환합니다.
-
FOR 루프를 사용하여 문자열 탐색
-
인덱스 i=0에서 시작하여 i
-
str[i]!='0'이 있으면 해당 문자열에서 시작하는 모든 하위 문자열이 유효함을 의미합니다.
-
색인 j=1에서 시작하여 i+j
-
stoi()를 사용하여 하위 문자열 str.substr(i,j)를 10진수로 변환합니다. X 이상인 경우 카운트를 증분합니다.
-
결과로 카운트를 반환합니다.
예시
#include <bits/stdc++.h> using namespace std; int greater_X(string str, int x){ int count = 0; int len = str.length(); for (int i = 0; i < len; ++i){ if(str[i] != '0'){ for (int j=1; (i + j) <= len; ++j){ if (stoi(str.substr(i, j)) > x){ count++; } } } } return count; } int main(){ string str = "987"; int x = 100; cout<<"Count of number of substrings with numeric value greater than X are: "<<greater_X(str, x); return 0; }
출력
위의 코드를 실행하면 다음 출력이 생성됩니다 -
Count of number of substrings with numeric value greater than X are: 1