zoukankan      html  css  js  c++  java
  • Number Sequence--POJ1019

    Number Sequence
    Time Limit: 1000MS   Memory Limit: 10000K
    Total Submissions: 35251   Accepted: 10151

    Description

    A single positive integer i is given. Write a program to find the digit located in the position i in the sequence of number groups S1S2...Sk. Each group Sk consists of a sequence of positive integer numbers ranging from 1 to k, written one after another. 
    For example, the first 80 digits of the sequence are as follows: 
    11212312341234512345612345671234567812345678912345678910123456789101112345678910

    Input

    The first line of the input file contains a single integer t (1 ≤ t ≤ 10), the number of test cases, followed by one line for each test case. The line for a test case contains the single integer i (1 ≤ i ≤ 2147483647)

    Output

    There should be one output line per test case containing the digit located in the position i.

    Sample Input

    2
    8
    3

    Sample Output

    2
    2
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<math.h>
    #define N 32000
    using namespace std;
    int main()
    {
        int a[9]= {0,9,180,2700,36000,450000,5400000,63000000,720000000};
        long long b[N]= {0},n,sum=0;
        int i,T,m,j,l,A,B;
        for(i=1; i<N; i++)
        {
            if(i<=9)
                b[i]=i;
            else
            {
                m=0;
                l=(int)log10(i)+1;
                for(j=1; j<l; j++)
                {
                    m=m*10+9;
                }
                b[i]=(i-m)*l+b[m];
            }
        // sum+=b[i];
        }
       // printf("%lld
    ",sum);确定b数组的范围,即N的大小;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%lld",&n);
            for(i=1;i<N;i++)
            {
                if(n>b[i])
                {
                    n-=b[i];
                }
                else
                {
                    break;
                }
            }
            for(i=1;i<8;i++)
            {
                if(n>a[i])
                    n-=a[i];
                else
                    break;
            }
            A=n/i;
            B=n%i;
            if(B!=0)
                A+=1;
            else
                B=i;
            m=0;
            for(j=1;j<i;j++)
                m=m*10+9;
            A=A+m;
            char str[10]= "";
            sprintf(str,"%d",A);
            printf("%c
    ",str[B-1]);
        }
        return 0;
    }
  • 相关阅读:
    获取Spring项目配置文件元素
    MyEclipse安装插件的几种方法
    排序-->桶排序
    排序-->冒泡排序
    排序-->选择排序
    排序-->插入排序
    约瑟夫问题----(数组+list)实现
    约瑟夫问题--->环形链表
    py---pycharm快捷键
    双向链表--简单的增删改查
  • 原文地址:https://www.cnblogs.com/zhengguiping--9876/p/4462542.html
Copyright © 2011-2022 走看看