(백준/C++) 이슈 2231: 분해

문제를 풀다

(백준/C++) 이슈 2231: 분해

문제 2231: 분해

어떤 자연수 N이 있을 때, 자연수 N의 분해 합은 N과 N의 자릿수의 합입니다.

임의의 자연수 M의 분해가 N이면 M은 N의 생성자라고 합니다.

예를 들어, 245는 256(=245+2+4+5)으로 분해됩니다.

www.acmicpc.net


설명하다

끈으로 해결 가능!

자세한 해결 방법은 코드에 주석으로 설명되어 있습니다!


코드

#include <iostream>
#include <string>

using namespace std;

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

	string N;
	cin >> N;

	bool flag = false; // 생성자가 있는지 없는지를 체크할 변수

	for (int i = 1; i < stoi(N); i++)
	{
		string num = to_string(i); // num에 i를 string으로 변환하여 넣음
		int sum = i; // 예제를 기준으로 216 + 2 + 1 + 6 이므로, 216을 먼저 sum에 넣음

		int i_len = to_string(i).length(); // i 의 길이를 구함

		for (int j = 0; j < i_len; j++) // i(=num)의 자릿수 만큼 반복
		{
			sum += num(j) - '0'; // 자릿수를 각각 더한다
		}
		if (sum == stoi(N)) // sum가 입력한 수가 같으면
		{
			cout << i << "\n"; // 생성자 출력
			flag = true; // 생성자 변수 true
			break;
		}
	}
	if (flag == false) // 생성자가 없는 경우
	{
		cout << "0" << "\n";
	}
	return 0;
}