c032 - 00382 - Perfection
題目描述
題目要求判斷給定的正整數是完美數、盈數還是虧數。完美數等於其所有真因數的和(不包括自身)。盈數的真因數和大于自身,虧數的真因數和小于自身。輸入為一系列正整數,直到輸入 0 為止。
解題思路
對於每個輸入的數字 a,程式碼計算其所有真因數的和 sum。然後,將 sum 與 a 進行比較,以確定 a 是完美數、盈數還是虧數。最後,按照題目要求的格式輸出結果。程式碼使用迴圈迭代從 1 到 a/2 的所有數字,檢查是否為 a 的因數。為了符合輸出格式,程式碼使用空格進行對齊。
複雜度分析
- 時間複雜度: O(n * sqrt(n)),其中 n 是輸入數字。因為對於每個數字,迴圈迭代到 n/2,而判斷是否為因數的操作是 O(1)。
- 空間複雜度: O(1),程式碼只使用了幾個整數變數來儲存中間結果,空間使用是常數級別。
程式碼
#include <iostream>
using namespace std;
int main(){
long long int a=0,sum=0,number1=0,number2=0;
cout << "PERFECTION OUTPUT" << endl;
while(cin >> a){
if(a>0){
for(int i=1;i<=a/2;i++){
if(a%i==0){
sum+=i;
}
}
number1=a;
while(number1>0){
number2++;
number1/=10;
}
while(number2-5<0){
cout << " ";
number2++;
}
number2=0;
if(sum>a){
cout << a <<" ABUNDANT" << endl;
}
else if(sum==a){
cout << a << " PERFECT" << endl;
}
else if(sum<a){
cout << a <<" DEFICIENT"<< endl;
}
sum=0;
}
else{
cout << "END OF OUTPUT" << endl;
}
}
}