문제설명
소스코드
#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으로 초기화 시킨다. 입력버퍼 또한 비워준다.
'자료구조 & 알고리즘 > BOJ' 카테고리의 다른 글
[C++] 백준 9단계 - 2581번 문제 (소수) (0) | 2023.05.12 |
---|---|
[C++] 백준 9단계 - 1978번 문제 (소수 찾기) (0) | 2023.05.12 |
[C++] 백준 9단계 - 2501번 문제 (약수 구하기) (0) | 2023.05.11 |
[C++] 백준 9단계 - 5086번 문제 (배수와 약수) (0) | 2023.05.10 |
[C++] 백준 8단계 - 10757번 문제 (큰 수 A+B) (0) | 2023.05.09 |