간단하 브루트 포스 문제이다
분해합을 찾는 함수가 주어졌을 때 그 생성자를 찾는 역함수는 존재하지 않는다.
(역함수의 경우 하나의 x가 두개의 y값을 가질 수도 있기 때문)
따라서 숫자 1부터 N-1 까지 분해합을 찾는 함수를 돌리면서
(N의 분해합은 무조건 N보다 크다)
가장 처음 요구되는 분해합이 구해지면 (생성자가 최소) 출력하고
N-1까지 분해합이 구해지지 않으면 0을 출력한다
#include <stdio.h>
int main()
{
int N;
scanf("%d", &N);
for (int i = 1; i < N; i++)
{
int temp = i;
int num = i;
while(temp > 0)
{
num += temp % 10;
temp /= 10;
}
if (num == N)
{
printf("%d", i);
N = 0;
break;
}
}
if (N != 0)
printf("0");
}