http://acm.hdu.edu.cn/showproblem.php?pid=1058
#include<iostream>
#include<string>
using namespace std;
int s[6000],p2,p3,p5,p7;
int Min(int a,int b,int c,int d)
{
int min=a;
if(b<min)min=b;
if(c<min)min=c;
if(d<min)min=d;
if(a==min)p2++;
if(b==min)p3++;
if(c==min)p5++;
if(d==min)p7++;
return min;
}
void plan()
{
p2=p3=p5=p7=1,s[1]=1;
int i;
for(i=2;i<=5842;i++)
{
s[i]=Min(s[p2]*2,s[p3]*3,s[p5]*5,s[p7]*7);
}
}
int main()
{
int n,carry;
string p;
plan();
while(cin>>n)
{
if(n==0)break;
carry=n%100;
p="th";
if(carry%10==1&&carry!=11)p="st";
if(carry%10==2&&carry!=12)p="nd";
if(carry%10==3&&carry!=13)p="rd";
cout<<"The "<<n<<p<<" humble number is "<<s[n]<<"."<<endl;
}
return 0;
}