c032: 00382 - Perfection

  1. 1. 內容
  2. 2. 範例輸入
  3. 3. 範例輸出
  4. 4. 想法
  5. 5. 程式碼

CPE 一顆星

題目連結:https://zerojudge.tw/ShowProblem?problemid=c032

內容

若一數其因數和(不含自己)等於此數,則為 Perfect Number。
6 = 1 + 2 + 3,28 = 1 + 2 + 4 + 7 + 14。
若小於則為 deficient,大於則為 abundant。

有一連串(不超過100個)正整數 n (1 <= n <= 60000),判斷此數是 perfect, deficient 或著 abunddant。

n = 0 結束。

輸出時數字部分佔5個字元長度,靠右對齊。與後方的敘述間空2個空白格。

範例輸入

15 28 6 56 60000 22 496 0

範例輸出

PERFECTION OUTPUT
15 DEFICIENT
28 PERFECT
6 PERFECT
56 ABUNDANT
60000 ABUNDANT
22 DEFICIENT
496 PERFECT
END OF OUTPUT

想法

由於數字數量很少(不超過100個),因此讀取的時候計算就好了。

開一變數紀錄因數和,接著用一迴圈從1跑到n-1,若整除則加進變數。

最後可用 setw() 對齊。

程式碼

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <bits/stdc++.h>
#define fastio ios_base::sync_with_stdio(false), cin.tie(nullptr)
using namespace std;

int main(){
fastio;
int n, sum;
cout << "PERFECTION OUTPUT\n";
while(cin >> n){
if(n == 0){
cout << "END OF OUTPUT\n";
break;
}
sum = 0;
for(int i = 1; i < n; ++i){
if(!(n % i)) sum += i;
}
cout << setw(5) << n << " ";
if(sum == n) cout << "PERFECT\n";
else if(sum < n) cout << "DEFICIENT\n";
else cout << "ABUNDANT\n";
}
return 0;
}