uva10706Number Sequence

来源:互联网 发布:高大上简历 知乎 编辑:程序博客网 时间:2024/06/03 22:06

uva越来越不稳定了,疑惑的是翻墙出去都打不开uva,只能用chrome31。。。而且vj也交不上去,有种想换oj的冲动。

比较简单,不解释。

#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;long long n;long long get(long long i){    long long sum=0,j=0,help;    while(i>0)    {        sum+=i;        help=9*int(pow(10,j));        if(i>=help)        {            i-=help;        }        else        {            i=0;        }        j++;    }    return sum;}void gettt(long long digit,long long dit){    char t[20];    sprintf(t,"%lld",dit);    //printf("%d\n",dit);    //for(int i=0;i<20;i++)      //  printf("%d ",t[i]);      //printf("a%lld %s\n",dit,t);    putchar(t[digit-1]);    printf("\n");}void fun(long long i,long long all){    long long j,t;    for(j=1;j<=i;j++)    {        if(j<10)            t=1;        else if(j<100)            t=2;        else if(j<1000)            t=3;        else if(j<10000)            t=4;        else if(j<100000)            t=5;        else if(j<1000000)            t=6;        else if(j<10000000)            t=7;        else if(j<100000000)            t=8;        else if(j<1000000000)            t=9;        if(all+t>n)        {            //printf("cc%dcc\n",j);            gettt(n-all,j);            break;        }        else if(all+t==n)        {            printf("%lld\n",j%10);            break;        }        all+=t;    }}void solve(){    long long i,j,all=0;    for(i=1;;i++)    {        j=get(i);        //printf("jj%d",j);        if(j+all>n)        {            //printf("bb%dbb\n",i);            fun(i,all);            break;        }        else if(j+all==n)        {            printf("%d\n",i%10);            break;        }        all+=j;    }}int main(){    long long t;    //for(int i=1;i<1000;i++)    //    printf("%d\n",i);    //printf("%lld",9e1);    scanf("%lld",&t);    while(t--)    {        scanf("%lld",&n);        solve();    }    return 0;}



0 0
原创粉丝点击