每个数都由2,3,5,7组成,所以新的数由之前的数生成。
/* 打表 ,速度更快 */ #include<stdio.h> #include<algorithm> using namespace std; int main() { int n1=1; long long a[6000]={0}; int m1,m2,m3,m4; m1=m2=m3=m4=1; a[1]=1; n1++; while(n1<=5842) { int min1=min(a[m1]*2,a[m2]*3); int min2=min(a[m3]*5,a[m4]*7); a[n1]=min(min1,min2); if(a[n1]==a[m1]*2)m1++; if(a[n1]==a[m2]*3)m2++; if(a[n1]==a[m3]*5)m3++; if(a[n1]==a[m4]*7)m4++; n1++; } int n; while(scanf("%d",&n)==1) { if(n==0)break; int tem=n; int t=n+1; if(tem==1&&n0!=11) printf("The %dst humble number is %lld.\n",n,a[t-1]); if(tem==2&&n0!=12) printf("The %dnd humble number is %lld.\n",n,a[t-1]); if(tem==3&&n0!=13) printf("The %drd humble number is %lld.\n",n,a[t-1]); if(tem!=1&&tem!=2&&tem!=3||n0>10&&n0<14) printf("The %dth humble number is %lld.\n",n,a[t-1]); } }