728x90
시간 제한 : 2초
메모리 제한 : 128MB
입력
입력은 테스트 케이스마다 한 줄 간격으로 n이 주어진다. (2 < n < 100, 000)
입력의 마지막엔 -1이 주어진다.
출력
테스트케이스 마다 한줄에 하나씩 출력해야 한다.
n이 완전수라면, n을 n이 아닌 약수들의 합으로 나타내어 출력한다(예제 출력 참고).
이 때, 약수들은 오름차순으로 나열해야 한다.
n이 완전수가 아니라면 n is NOT perfect. 를 출력한다.
소스코드
#include <iostream> #include <vector> #include <algorithm> #include <math.h> using namespace std; int main(void) { int n, sum = 0; while (1) { cin >> n; if (n == -1) break; sum = 1; vector<int> arr; arr.push_back(1); for (int i = 2; i < n; i++) { if (n%i == 0) arr.push_back(i), sum += i; if (sum > n) break; } if (sum == n) { int size = arr.size(); cout << n << " = "; sort(arr.begin(), arr.end()); for (int i = 0; i < size - 1; i++) cout << arr[i] << " + "; cout << arr[size - 1]; } else { cout << n << " is NOT perfect."; } cout << '\n'; } }
Tip
약수인 것을 배열에 넣어두고 합을 구하면 푸는 간단한 구현문제다.
728x90
'Computer Science > Algorithm Problem' 카테고리의 다른 글
백준] 2564 - 경비원(KOI 2007 지역본선 초등부) (0) | 2018.07.23 |
---|---|
백준] 11328 - Strfry(CCPC 2014) (0) | 2018.07.22 |
백준] 4539 - 반올림(ACM-ICPC Regionals) (0) | 2018.07.16 |
백준] 2740 - 행렬 곱셈 (0) | 2018.07.13 |
백준] 15720 - 카우버거(중앙대 CodeRace 2018) (0) | 2018.07.11 |