문제설명

 

소스코드

#include <iostream>
using namespace std;
int main()
{
	int N; int count = 0; int sum = 0;
	while (true)
	{
		cin >> N;
		if (N == -1) break;
		int* arr = new int[N]; //동적 할당
		for (int i = 1; i < N; ++i)
		{
			if (N % i == 0) //i로 나눈 나머지가 0이라면
			{

				arr[count++] = i; //배열에 i를 저장
				sum += i; //sum에 i를 더함
			}
		}
		if (sum == N) //완전수라면
		{
			cout << N << " = ";
			for (int i = 0; i < count; ++i)
			{
				if (i == count - 1) cout << arr[i] << endl; //배열의 마지막은 +를 출력하면 안된다.
				else cout << arr[i] << " + "; // 배열 원소와 +를 출력한다.
			}
		}
		else cout << N << " is NOT perfect." << endl;
		cin.ignore(); //입력 버퍼 비우기
		count = 0; sum = 0; //0으로 초기화
	}
	
}

 

풀이

  • N을 입력받고 N개만큼 동적할당
  • 약수들을 배열에 저장하고 sum에 약수들을 모두 더한다.
  • 약수들의 합과 N이 같다면 완전수이므로 출력 형식대로 출력한다.
  • 마지막엔 count와 sum변수들을 0으로 초기화 시킨다. 입력버퍼 또한 비워준다.