약수를 모두 구하면 된다. for문을 활용하여 1부터 N-1까지 모두 나눈후 나누었을 때 나머지가 0인 값들만 구해낸다.
//백준 9506, 약수들의 합
#include <iostream>
#include <vector>
std::vector<int> vec;
int main(){
int n;
while(true){
std::cin >> n;
if(n == -1) break;
int i{1}; int sum{0};
while(n > i){
if(n%i == 0){
sum += i;
vec.push_back(i);
}
++i;
}
if(sum == n){
std::cout << n << " = ";
std::cout << vec[0];
for(int i{1}; i<vec.size(); ++i){
std::cout << " + " << vec[i];
}
std::cout << '\n';
}
else std::cout << n << " is NOT perfect.\n";
vec.clear();
}
return 0;
}