模拟实现:
/*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
本文通过一个具体的模拟算法案例,展示了如何计算特定位置上的数字。代码包括获取数字长度和获取指定位置的数字两个辅助函数,主函数则实现了核心逻辑,即找到序列中指定位置的数字。

被折叠的 条评论
为什么被折叠?



