PS/Baekjoon Online Judge
[백준 2231] 분해합 [C]
kimyoungrok
2021. 7. 25. 16:00
728x90
풀이
4673 - 셀프 넘버 문제와 비슷하다.
단, 생성자의 여부가 아닌, 가장 작은 생성자를 출력해야 한다.
- 생정자의 범위는 N - 자리수 * 9 부터 N-1이다.
- 만약 생성자를 구하지 못했다면, 0을 반환한다.
소스코드
#include <stdio.h>
int selfNum(int n){
int cnt = 0, temp = n;
for (; temp > 0; temp /= 10) ++cnt;
for (int i = n - 9*cnt; i < n; i++){
temp = i;
int result = i;
for (; temp > 0; temp /= 10) result += temp%10;
if (result == n)
return i;
}
return 0;
}
int main(){
int N;
scanf("%d", &N);
printf("%d\n", selfNum(N));
}
출처 및 참고자료
2231번: 분해합
어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이
www.acmicpc.net
[백준 4673] 셀프 넘버 [C]
풀이 생성자가 없으면, d(n)을 형성하지 못하므로, d(n)이 아닌 수들이 셀프 넘버라고 볼 수 있다. 소스코드 #include #define MAX 10001 int n_selfNum(int n){ int result = n; for (; n > 0; n /= 10) result..
kyr-db.tistory.com
728x90