pku 1058 Humble Numbers
和pku1338(Ugly Numbers)差不多吧,那几个英文后缀。。。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef long long LL;
#define MAXN 5850
LL ugly[MAXN]={1,1};
const char suffix[4][3]={"th","st","nd","rd"};
inline int getid(int x)
{
if(x%10==1&&x%100!=11) return 1;
else if(x%10==2&&x%100!=12) return 2;
else if(x%10==3&&x%100!=13) return 3;
else return 0;
}
inline LL Min(LL a,LL b){return a<b?a:b;}
inline LL Min(LL a,LL b,LL c,LL d)
{
a = Min(a,b);
a = Min(a,c);
a = Min(a,d);
return a;
}
void init()
{
int p2=1,p3=1,p5=1,p7=1;
for(int i=2;i<MAXN;i++)
{
ugly[i] = Min(ugly[ p2 ]*2, ugly[ p3 ]*3, ugly[ p5 ]*5, ugly[ p7 ]*7);
if(ugly[i] == ugly[ p2 ] * 2) p2++;
if(ugly[i] == ugly[ p3 ] * 3) p3++;
if(ugly[i] == ugly[ p5 ] * 5) p5++;
if(ugly[i] == ugly[ p7 ] * 7) p7++;
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("tdata.txt","r",stdin);
#endif
init();
int n;
while(scanf("%d",&n),n)
{
printf("The %d%s humble number is %I64d.\n",n,suffix[ getid(n) ],ugly[n]);
}
return 0;
}
浙公网安备 33010602011771号