这题是组合数学啊,题意是给1、12、123、1234、12345、123456 ……这样的数字,问第i个数字是多少。这题的难点在于第i个数与第i-1个数的位数差不定,可以利用公式:(int)log10(double(i))+1,当增加的数字是10的幂次关系时个数会变化。这样操作起来会方便多,而且打表会更好一点。
代码如下
#include<stdio.h>
#include<math.h>unsigned int a[31270],s[31270];
void reset()
{
int i;
a[1]=1;
s[1]=1;
for(i=2;i<31270;i++)
{
a[i]=a[i-1]+(int)log10((double)i)+1;
s[i]=s[i-1]+a[i];
}
}
void main()
{
int t,n,i,k,tmp,pos;
scanf("%d",&t);
reset();
while(t--)
{
scanf("%d",&n);
i=1;
while(s[i]<n)
i++;
pos=n-s[i-1];
tmp=0;
for(i=1;tmp<pos;i++)
{
tmp+=(int)log10((double)i)+1;
}
k=tmp-pos;
printf("%d\n",(i-1)/(int)pow(10.0,k)%10) ;
}
}