模拟实现:
/*288k 0ms*/
#include <iostream>
#include <fstream>
using namespace std;
/*模拟算法*/
int Getlen(int a);
int Getvalue(int a,int k);
int main()
{
int t;
cin>>t;
while(t--)
{
int a;
cin>>a;
int cur=1;
int cursize=1;
while(a-cursize>=0)
{
cur++;
a-=cursize;
// cout<<a<<" ";
cursize+=Getlen(cur);
}
if(a==0)
{
cout<<(cur-1)%10<<endl;
continue;
}
//cur代表的是当前的数字
int s=1;
int curs=1;
while(a-curs>=0)
{
s++;
a-=curs;
curs=Getlen(s);
}
if(a==0)
cout<<(s-1)%10<<endl;
else
{
s++;
cout<<Getvalue(s,a)<<endl;
}
}
system("pause");
}
int Getlen(int a)
{
int i=1;
while(a/10)
{
i++;
a=a/10;
}
return i;
}
int Getvalue(int a,int k)
{
int l=Getlen(a);
int p=l-k;
while(p--)
{
a=a/10;
}
return a%10;
}
实验数据:
1 1 123456789 3 987654321 8 2147483647 2 2147483648 3 2147483656 7 192 3 5000000 8 500000 0 499999 1 500001 4 50000000 3 50 5 500 4 5000 4 500000 0 50000000 3 80 0