poj 1019

来源:互联网 发布:云计算 中国 编辑:程序博客网 时间:2024/06/05 16:34


代码如下

#include<math.h>#include<iostream>#include<cstdio>using namespace std;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];    }    }    int main(){    int T;    int n;    int i;    scanf("%d",&T);    reset();    while(T--)    {        scanf("%d",&n);        i=1;                while(s[i]<n) i++;              int pos=n-s[i-1];         int tmp=0;        for(i=1;tmp<pos;i++)        {            tmp+=(int)log10((double)i)+1;        }           int k=tmp-pos;        printf("%d\n",(i-1)/(int)pow(10.0,k)%10) ;/*从右向左求,比如123456,k=2,则结果为4*/    }      return 0;      }  


原创粉丝点击