题挺简单的,代码写的很乱,但是这是我很长时间以来一下AC的啊!哎~!
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
int T,a[40000],b[40000];
int fun(int n)
{
__int64 i,j,k,len=1;
i=9;
j=1;
len=1;
k=9;
while(n>len)
{
i--;
if(i==0)
{
k*=10;
i=k;
j++;
}
n-=len;
len+=j;
}
return n;
}
int main()
{
__int64 i,j,k,n,len=1,sum=0;
k=9;
j=1;
n=9;
i=1;
for(;i<=32000; i++)
{
a[i]=j;//记录的是数
b[i]=len;//记录的是长度
n--;
j++;
if(n==0)
{
len++;
k*=10;
n=k;
}
}
for(j=2; j<32000; j++)
b[j]+=b[j-1];
b[0]=0;
scanf("%d",&T);
// for(int l=1; l<=80; l++)
while(T--)
{
// n=l;
scanf("%I64d",&n);
n=fun(n);
for(j=1; j<32000; j++)
{
if(n>b[j-1] && n<=b[j])
break;
}
n-=b[j-1];
sum=b[j]-b[j-1];
int m=a[j];
for(k=1; k<=sum-n;k++)
m=m/10;
printf("%d\n",m%10);
}
return 0;
}