Problem Description I will show you the most popular board game in the Shanghai Ingress Resistance Team.
Input The first line of input contains an integer t (1≤t≤500000) , the number of test cases. t test cases follow. Each test case provides one integer n (1≤n≤109) .
Output For each test case, output one line with only one integer corresponding to the shortest "I Count Two Three Number" no smaller than n .
Sample Input 10 1 11 13 123 1234 12345 123456 1234567 12345678 123456789
Sample Output 1 12 14 125 1250 12348 123480 1234800 12348000 123480000 |
这道题目由于是2,3,5,7的次方,所以可能性不会太多,可以通过打表,然后二分查找的方法来解决
AC:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
long long ans[1024000]={0};
int main()
{
int t,cnt=1;
scanf("%d",&t);
long long n;
for(int i=0;i<=30;i++)
for(int j=0;j<=20;j++)
for(int k=0;k<=15;k++)
for(int l=0;l<=11;l++)
if(i+j+k+l<32){
ans[cnt++]=pow(2,i)*pow(3,j)*pow(5,k)*pow(7,l);
}//打表后排序
sort(ans,ans+cnt);
while(t--)
{
scanf("%lld",&n);
long long tmp=lower_bound(ans,ans+cnt,n)-ans;//二分查找大于或等于n的第一个数的位置
printf("%lld\n",ans[tmp]);
}
return 0;
}