和上题差不多,用的递推方法比较水,二分查找可以更快,我只是顺序查找的,注意下输入格式,11和1的后缀是不一样的
#include<stdio.h>
int main()
{
int n, i, j, k, a[5842], b[] = { 2, 3, 5, 7 };
a[0] = 1;
for (i = 1; i < 5842; i++)
{
int result = 0x7FFFFFFF;
for (k = 0; k < 4; k++)
for (j = 0; j < i; j++)
{
int temp = b[k] * a[j];
if (temp > a[i - 1])
{
if (temp < result)
result = temp;
break;
}
}
a[i] = result;
}
while (scanf("%d", &n), n)
{
printf("The %d", n);
int d = n % 10, t = n % 100;
if (d == 1 && t != 11)
printf("st");
else if (d == 2 && t != 12)
printf("nd");
else if (d == 3 && t != 13)
printf("rd");
else
printf("th");
printf(" humble number is %d.\n", a[n - 1]);
}
return 0;
}