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
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; }