链接:POJ 1019
/*****************************************
author : Grant Yuan
time : 2014/10/19 14:38
source : POJ 1019
algorithm: 组合计数
******************************************/
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cstdlib>
#include <cmath>
using namespace std;
long long a[33000];
long long s[33000];
long long tt=2147483647;
int t,n;
void Get_a()
{
a[1]=s[1]=1;
for(int i=2;i<=32000;i++)
{
a[i]=a[i-1]+(int)log10(i*1.0)+1;
s[i]=s[i-1]+a[i];
if(s[i]>tt) break;
}
}
int Get_ans()
{
int k,i;
for(i=1;;i++)
{
if(s[i]>=n) break;
}
int pos=n-s[i-1];
int sum=0;
for(i=1;;i++)
{
sum=sum+1+(int)log10(i*1.0);
if(sum>=pos) break;
}
return (i)/(int)pow((double)10,sum-pos)%10;
}
int main()
{
scanf("%d",&t);
memset(a,0,sizeof(a));
memset(s,0,sizeof(s));
Get_a();
while(t--){
scanf("%d",&n);
int ans=Get_ans();
printf("%d
",ans);
}
return 0;
}