문제
어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다.
어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 된다. 따라서 245는 256의 생성자가 된다. 물론, 어떤 자연수의 경우에는 생성자가 없을 수도 있다.
반대로, 생성자가 여러 개인 자연수도 있을 수 있다.
자연수 N이 주어졌을 때, N의 가장 작은 생성자를 구해내는 프로그램을 작성하시오.
입력
첫째 줄에 자연수 N(1 ≤ N ≤ 1,000,000)이 주어진다.
출력
첫째 줄에 답을 출력한다. 생성자가 없는 경우에는 0을 출력한다.
예제 입력 1
216
예제 출력 1
198
#include <iostream>
using namespace std;
int f(int n) {
int result = n;
while(n) {
result += n % 10;
n /= 10;
}
return result;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n, result;
cin >> n;
for(int i=0; i<=n; i++) {
if(f(i) == n) {
result = i;
break;
}
if(i == n) result = 0;
}
cout << result << '\n';
return 0;
}
일단 분해합 알고리즘 자체는 어려운 것이 없다.
분해합 알고리즘은 말 그대로 구현하면 되기때문에... 함수로 따로 구현해준뒤,
제일 작은값을 찾아야하므로 0부터 n까지 반복문을 돌면서 i가 분해합으로 n을 만들었을시 break해주고 출력해준다.
만약 반복문이 끝까지 돌았다면 분해합으로 n을 만드는수를 찾지 못한것이므로 0을 출력해준다.
'PS > 백준' 카테고리의 다른 글
백준 / 수학 / 11050번 / 이항 계수 1 / C++ (0) | 2021.09.15 |
---|---|
백준 / 문자열 / 1259번 / 펠린드롬수 / C++ (0) | 2021.09.14 |
백준 / 수학 / 10250번 / ACM 호텔 / C++ (0) | 2021.09.11 |
백준 / 수학 / 4153번 / 직각삼각형 / C++ (0) | 2021.09.09 |