码迷,mamicode.com
首页 > 其他好文 > 详细

Number Sequence--POJ1019

时间:2015-04-28 13:27:26      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:

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\n",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\n",str[B-1]);
    }
    return 0;
}

 

Number Sequence--POJ1019

标签:

原文地址:http://www.cnblogs.com/zhengguiping--9876/p/4462542.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!