BOJ 2231 분해합

문제링크 :

BOJ2231

요약

자연수 N을 입력했을때 [N = M(자연수)+ M을 이루는 각자리수의 합]이 성립하는 M을 구하여라.

풀이

자연수 N의 분해합은 당연히 N보다 클수 밖에 없다. 그러므로 입려한 N의 생성자는 N보다 작을 것이다. N의 최대크기가 1,000,000이므로 1부터 전부다 확인해봐서 가장 처음으로 조건이 성립할때 break해주고 출력해준다. 조건을 만조하는 생성자가 없는 경우에는 0을 출력해준다.

코드

#include<iostream>
using namespace std;
int n,n2,ans,i;
int main() {
	ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
	cin >> n;
	for (i = 1; i <= n; i++) {
		ans = i;
		n2 = i;
		while (n2) {
			ans += n2%10;
			n2 /= 10;
		}
		if (ans == n)
			break;
	}
	if (ans == n) cout << i << "\n";
	else cout << "0" << "\n";
}

Comments