http://user.qzone.qq.com/289065406/blog/1301527312這個(gè)題解,挺詳細(xì),不錯(cuò)。
注意的就是log()和pow()函數(shù)的使用 兩個(gè)都是重載函數(shù),函數(shù)原型分別為
double log(double)
float log(float)
double pow(double , double)
float pow(float ,float)
所以當(dāng)傳參的類型不是double或float時(shí),必須強(qiáng)制轉(zhuǎn)換為其中一種類型,否則編譯出錯(cuò)。一般建議用double
#include<stdio.h>
#include<string.h>
#include<math.h>
unsigned a[31269],s[31269];
int init()
{
int i;
a[1]=s[1]=1;
for (i=2; i<31269 ; i++ )
{
a[i]=a[i-1]+(int)log10((double)i)+1;
s[i]=s[i-1]+a[i];
}
return 0;
}
int compute(int n)
{
int i=1,pos,len;
while (s[i]<n)
i++;
pos=n-s[i-1];
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()
{
int t,n,ans,i;
init();
scanf("%d",&t);
while (t--)
{
scanf("%d",&n);
ans=compute(n);
printf("%d\n",ans);
}
return 0;
}