코딩테스트/Baekjoon

[백준 #2231] 분해합 (C++)

동띵 2021. 9. 14. 13:42

https://www.acmicpc.net/problem/2231

 

2231번: 분해합

어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이

www.acmicpc.net

 

num이 0이 아닐 때까지 10으로 나눈 나머지 값을 sum에 더하고,

10으로 나눈 몫을 num에 다시 넣어주는 것을 반복한다.

즉, num의 각 자릿수를 더하는 것이다.

 

그다음 각 자릿수를 더한 값과 i 값이 입력받은 n이라면 생성자를 구한 것이기 때문에

result에 i의 값을 넣어준다.

 

이 과정을 0부터 입력받은 숫자까지 차례대로 하다가 

생성자가 발견되면 이를 출력하고 종료한다.

 

#include <iostream>
using namespace std;

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);

	int n, result = 0;
	cin >> n;

	for (int i = 0; i < n; i++) {
		int num = i;
		int sum = 0;

		while (num != 0) {
			sum += num % 10;
			num /= 10;
		}

		if (sum + i == n) {
			result = i;
			break;
		}
	}
	cout << result;
	return 0;
}

 

'코딩테스트 > Baekjoon' 카테고리의 다른 글

[백준 #1476] 날짜 계산 (C++)  (0) 2021.09.18
[백준 #2309] 일곱 난쟁이 (C++)  (0) 2021.09.15
[백준 #2164] 카드2 (C++)  (0) 2021.09.10
[백준 #5565] 영수증 (C++)  (0) 2021.09.10
[백준 #6603] 로또 (C++)  (0) 2021.09.09