題目連結: https://zerojudge.tw/ShowProblem?problemid=c122
# 內容
如果一個數字它的質因數只有 2,3,5 或 7 則我們稱這個數字為 Humble number。下列數字代表前 20 個 Humble numbers:1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 27,...
# 輸入
輸入包含多個測試資料。每一個測試資料包含一個整數n,1<= n <= 5842。當 n=0 時代表輸入結束。
# 輸出
對每個測試資料必須輸出一行 "The nth humble number is number."。對每個 nth 你必須依照 n 值不同輸出正確的序數 "st", "nd", "rd", 或 "th"。請參考 sample output。
# 解題思路
set 在填入數字時會自動排序喔
# 程式碼
#include <bits/stdc++.h> | |
using namespace std; | |
typedef long long ll; | |
string Ord(int n){ | |
n%=100; | |
if(n>=11&&n<=20) | |
return "th"; | |
int x = n % 10; | |
if(x==1) | |
return "st"; | |
else if(x==2) | |
return "nd"; | |
else if(x==3) | |
return "rd"; | |
else | |
return "th"; | |
} | |
int main(){ | |
int n,i=1; | |
set<ll> H_N; | |
long long Humble_num[5843]; | |
H_N.insert(1); | |
for(set<ll>::iterator it=H_N.begin();it!=H_N.end()&&i<=5842;it++,i++){ | |
Humble_num[i]=*it; | |
H_N.insert(*it * 2); | |
H_N.insert(*it * 3); | |
H_N.insert(*it * 5); | |
H_N.insert(*it * 7); | |
} | |
while(cin>>n&&n) | |
cout<<"The "<<n<<Ord(n)<<" humble number is "<<Humble_num[n]<<".\n"; | |
} |