题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1058
就比丑数多了一个素因数7罢了
此题还要明白一个常识:
1.如果n对10取余余1,并且对100取余不等于11,那么用英文表示第几的时候以st结尾
2.如果n对10取余余2,并且对100取余不等于12,那么用英文表示第几的时候以nd结尾
3.如果n对10取余余3,并且对100取余不等于13,那么用英文表示第几的时候以rd结尾
4.其他的都以th结尾。
#include<cstdio> #include<iostream> #include<algorithm> using namespace std; const int maxn=6007; long long Humble[maxn]= {0,1}; void Init() { long long num2=2,num3=3,num5=5, num7=7; int i, j, k, z; int t; i=j=k=z=1; for(int x=2; x<maxn; x++) { t=min(num2, min(num3, min(num5, num7))); Humble[x]=t; if(t==num2) num2=Humble[++i]*2; if(t==num3) num3=Humble[++j]*3; if(t==num5) num5=Humble[++k]*5; if(t==num7) num7=Humble[++z]*7; } } int main() { Init(); int n; while(scanf("%d", &n), n) { if(n%10==1&&n%100!=11) printf("The %dst humble number is %lld. ", n, Humble[n]); else if(n%10==2&&n%100!=12) printf("The %dnd humble number is %lld. ", n, Humble[n]); else if(n%10==3&&n%100!=13) printf("The %drd humble number is %lld. ", n, Humble[n]); else printf("The %dth humble number is %lld. ", n, Humble[n]); } return 0; }