문제 - 약수들의 합 (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();
}
}
결과

좋은 정보 감사합니다