一道找规律的数学题。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<iostream>
#include<queue>
#include<vector>
#include<set>
#include<map>
#include<ctime>
#include<bitset>
#define LL long long
#define db double
#define EPS 1e-15
#define inf 1e10
using namespace std;
const int size=31269;
unsigned a[size];
unsigned s[size];
void table(){
a[1]=s[1]=1;
for (int i=2;i<size;i++){
a[i]=a[i-1]+(int)log10((double)i)+1;
s[i]=s[i-1]+a[i];
}
}
int calc(int n){
int i=1;
while (s[i]<n) i++;
int pos=n-s[i-1];
int len=0;
for (i=1;len<pos;i++)
len+=(int)log10((double)i)+1;
return (i-1)/(int)pow((double)10,len-pos)%10;
}
int main(){
table();
int test;
scanf("%d",&test);
while (test--){
int n;
scanf("%d",&n);
printf("%d\n",calc(n));
}
return 0;
}