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;
}

posted @ 2010-09-12 00:56  菜到不得鸟  阅读(137)  评论(0)    收藏  举报