• Number Sequence(poj 1019)


    题意:

    有一串数字串,其规律为

    1 12 123 1234 12345 123456 1234567 12345678 123456789 12345678910 1234567891011 123456789101112······k

    输入位置n,计算这一串数字第n位是什么数字,注意是数字,不是数!

    例如12345678910的第10位是1,而不是10,第11位是0,也不是10。总之多位的数在序列中要被拆分为几位数字,一个数字对应一位。

    //运用了一个公式:求一个数的位数时,可以用 (int)log10((double)i)+1
    #include<cstdio>
    #include<iostream>
    #include<cmath>
    #include<cstring>
    #define LL long long
    #define M 100010
    int num[M],b[M];//num[i]表示第i个数串的长度 
    using namespace std;
    void init()
    {
        for(int i=1;i<=100000;i++)
          num[i]=num[i-1]+(int)log10((double)i)+1;
    }
    int main()
    {
        init();//打表 
        int T;
        cin>>T;
        while(T--)
        {
            int n;LL length=0;
            cin>>n;
            for(int i=1;i<=100000;i++)
              if(length+(LL)num[i]<n)
                length+=(LL)num[i];
              else break;//找到所在数串 
            int p=0;
            for(int i=1;i<=100000;i++)
            {
                int tmp=(int)log10((double)i)+1;
                if(length+(LL)tmp<n)
                  length+=(LL)tmp;
                else
                {
                    p=i;
                    break;//找到所在整数 
                }
            }
            memset(b,0,sizeof(b));
            int s=n-length,cnt=(int)log10((double)p)+1;
            while(cnt)//将所在整数分解 
            {
                b[cnt--]=p%10;
                p/=10;
            }
            cout<<b[s]<<endl;
        }
        return 0;
    }
    View Code
  • 相关阅读:
    迷 宫
    车厢调度
    快速幂
    2804 最大最小数质因数
    3022 西天收费站
    2291 糖果堆
    1464 装箱问题 2
    Exists/In/Any/All/Contains操作符
    window.onscroll
    zIndex 属性设置元素的堆叠顺序。
  • 原文地址:https://www.cnblogs.com/harden/p/5644062.html
Copyright © 2020-2023  润新知