반응형
● 문제 접근 과정
1. 어떤 숫자 n이 자신을 제외한 모든 약수들의 합과 같으면, 그 수를 완전수라고 한다. 예를 들어 6은 6 = 1 + 2 + 3 으로 완전수이다. n이 완전수인지 아닌지 판단해주는 프로그램을 작성하라.
2. 입력의 마지막엔 -1이 주어진다.
3. n이 완전수라면, n을 n이 아닌 약수들의 합으로 나타내어 출력한다(예제 출력 참고). 이때, 약수들은 오름차순으로 나열해야 한다. n이 완전수가 아니라면 n is NOT perfect. 를 출력한다.
4. while문 안에 만약 입력값이 -1일 경우 while문을 통과함.
5. n을 받고 n의 자기자신을 제외하고 약수들을 배열에 저장. 약수들의 합도 저장
6. 약수들의 합이 만약 n과 같다면, 약수들의 합을 나열하여 출력.
7. 그게 아니라면 cout << n << " is NOT perfect." << endl;
8. 한번 돌고 나면 변수들을 다시 초기화 하여 n의 입력값이 -1이 나올때 까지 반복.
● 구현
#include <iostream>
using namespace std;
int main() {
int n;
int sum = 0;
int cnt = 0;
int a[10000];
int j = 0;
while (1) {
cin >> n;
if (n == -1)
break;
for (int i = 1; i <= n / 2; i++) {
if (n % i == 0) {
a[j] = i;
j++;
cnt++;
sum += i;
}
}
if (sum == n) {
cout << n << " = " << a[0];
for (int i = 1; i < cnt; i++) {
cout << " + " << a[i];
}
cout << endl;
;
} else
cout << n << " is NOT perfect." << endl;
j = 0;
cnt = 0;
sum = 0;
}
return 0;
}
https://www.acmicpc.net/problem/9506
반응형