Number Sequence
Input: standard input
Output: standard output
Time Limit: 1 second
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 80digits of the sequence are as follows:
11212312341234512345612345671234567812345678912345678910123456789101112345678910
Input
The first line of the input file contains a single integer t (1 <=t <=25), 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 Output for Sample Input
2 8 3 | 2 2 |
题意:给一个有规律的字符串:
11212312341234512345612345671234567812345678912345678910123456789101112345678910
求出第i位上的数是多少
#include <stdio.h>
#include <string.h>
#include <math.h>
long long int a[100];
int main()
{
long long int i,j,n,m,s,pre,t,sum;
scanf("%lld",&t);
while(t--)
{
scanf("%lld",&n);
pre=s=m=0;
for(i=1;;i++)
{ j=i;
sum=0;
while(j!=0)
{ j=j/10;
sum++;
}
m+=sum;
s+=m;
if(s>=n)
{
break;
}
pre=s;
}
n=n-pre;
for(i=1,s=0;;i++)
{
j=i;
sum=0;
while(j!=0)
{ a[sum++]=j%10;
j=j/10; }
if(s+sum>=n)
{ break; }
s=s+sum;
}
printf("%lld\n",a[sum-n+s]);
}
return 0;
}