UVa 382
題目
http://domen111.github.io/UVa-Easy-Viewer/?382
給很多個數字 $n$ ,對於每個 $n$ ,求該數字的所有因數,不包含自己本身的總和
如果等於輸出 PERFECT
,若小於輸出 DEFICIENT
,若大於輸出 ABUNDANT
想法
對於每個 $n$ 暴力掃過一遍看看有那些因數,加總起來判斷
至於輸出要對齊的部分,這邊採用 log 的方式得知求出的數字是幾位數,進而判斷出應該要填充多少的空格
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| #include<iostream> #include<cmath> using namespace std; int n, cnt=0; int main(){ cout<<"PERFECTION OUTPUT\n"; while(cin>>n && n){ cnt=0; for(int i=1 ; i<n ; i++){ if(n%i==0){ cnt+=i; } } for(int i=0, p=5-((int)log10(n)+1) ; i<p ; i++){ cout<<' '; } cout<<n<<" "; if(cnt==n){ cout<<"PERFECT\n"; } else if(cnt<n){ cout<<"DEFICIENT\n"; } else{ cout<<"ABUNDANT\n"; } } cout<<"END OF OUTPUT\n"; return 0; }
|
複雜度分析
每筆測試資料時間複雜度為 $O(n)$