문제 - 약수들의 합 (Bronze 1)

풀이 전략
- 완전수 = 자기 자신을 제외한 약수들의 합
-> 따라서 자기 자신을 제외하고 반복문을 돌려서 약수이면 배열에 저장을 한 뒤, 저장했던 배열을 다시 반복문을 돌려서 sum==num 이면 출력하고, 그렇지 않으면 NOT perfect를 출력 
- 1+2+3의 경우, 반복문과 조건문을 섞어서 해야함 (cout<<A[i]<<" + ";로 하게 되면 맨 마지막에 불필요한 +가 한번 더 출력되기 때문)
 
소스 코드
#include <iostream>
#include <vector>
using namespace std;
int main(void){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    vector<int> A;
    int num;
    while(1){
        cin>>num;
        if(num==-1){
            break;
        }
        for(int i=1;i<num;i++){
            if(num%i==0){
                A.push_back(i);
            } 
        }
        int sum=0;
        for(int i=0;i<A.size();i++){
            sum+=A[i];
        } 
        if(sum==num){
            cout<<num<<" = ";
            for(int j=0;j<A.size();j++){
                cout<<A[j];
                if(j<A.size()-1){
                    cout<<" + ";
                } 
            }
            cout<<'\n';
        }else{
            cout<<num<<" is NOT perfect."<<'\n';
        }
        A.clear(); 
        
        
    }
}
결과

좋은 정보 감사합니다