题目:http://acm.hdu.edu.cn/showproblem.php?pid=1058
题意:
有一系列低调数字,它们的特点是其质因数只有2,3,5,7中的任意几种,这些低调数为1,2,3,4,5,6,7,8,9,10,12,14,15,16,18,20,21,24,…按大小排序,第一个低调数为1,第二个低调数为2,…,第5842个低调数为2000000000;现任输入一个数字n (1<=n<=5842),要求输出第n个低调数的值。
思路:
这个低调数一定是由a个2,b个3,c个5,d个7相乘得到,假设2^a最接近数字2000000000,那这个a的值也就32左右,同样b的最大值更小,这样枚举a个2乘以b个3乘以c个5乘以d个7,最终结果只要小于等于2000000000都是我们的低调数,最后将这5842个数排序即可。
#include <iostream>
#include <string.h>
#include <algorithm>
using namespace std;
int main()
{
char tail[5];
__int64 count,n;
__int64 num[6000];
__int64 i2,i3,i5,i7;
count=0;
for(i2=1;i2<=2000000000;i2*=2)
{
for(i3=1;i2*i3<=2000000000;i3*=3)
{
for(i5=1;i2*i3*i5<=2000000000;i5*=5)
{
for(i7=1;i2*i3*i5*i7<=2000000000;i7*=7)
{
num[count]=i2*i3*i5*i7;
count++;
}
}
}
}
sort(num,num+5842);
while(scanf("%I64d",&n)&&n!=0)
{
if(n%10==1 && n%100!=11)
strcpy(tail,"st");
else
if(n%10==2 && n%100!=12)
strcpy(tail,"nd");
else
if(n%10==3 &&n%100!=13)
strcpy(tail,"rd");
else
strcpy(tail,"th");
printf("The %I64d%s humble number is %I64d.\n",n,tail,num[n-1]);
}
return 0;
}