https://www.acmicpc.net/problem/1356
유진수란?
어떤 수를 10진수로 표현한 뒤 그 수를 두 부분으로 나눴을 때, 앞부분 자리수의 곱과 뒷부분 자리수의 곱이 같을 때를 말하는 수 이다.
문제
> 예를들어 12345는 총 4가지 방법으로 나눌수 있다.
> 1-2345, 12-345, 123-45, 1234-5
> 어떤 수 N이 주어질 때 이 수가 유진수 인지 아닌지 구해라.
접근
각 자리 수를 인덱스로 하여 반복문을 돌며 유진수 판별 계산식을 적용해 판단한다.
문제 해결
> substr(시작위치, 길이)를 이용해 문자열을 잘라 각각 유진수 검증 함수에 넣고 판별한다.
> 검증되어 나온 값끼리 비교하여 같다면 YES, 아니면 NO를 출력한다.
코드
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int calcN(string s)
{
int result = 1;
for (int i = 0; i < s.length(); i++)
{
result *= (s[i] - '0');
}
return result;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
string N;
cin >> N;
for (int i = 1; i < N.length(); i++)
{
if (calcN(N.substr(0, i)) == calcN(N.substr(i, N.length() - i)))
{
cout << "YES" << '\n';
return 0;
}
}
cout << "NO" << '\n';
}

후기
문자열을 원하는 길이만큼 잘라낼 수 있는 substr에 대해 알게 되었다.
N의 범위가 2,147,483,647이라는 조건을 보고 자료형의 크기에 대해 찾아보았다. int 형은 -2,147,483,648 ~ 2,147,483,647 까지라고 한다.
계속 틀리길래 온 코드를 뒤졌더니 YES, NO를 소문자로 해서였다.. 신경써서 잘 보자