您的位置:首页 > 产品设计 > UI/UE

POJ-1019-Number Sequence

2016-08-22 11:04 489 查看
Number Sequence

Time Limit: 1000MS Memory Limit: 10000K
Total Submissions: 37890 Accepted: 10952
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

                       a[]             b[]
1                 11
12 2
3
123 3
6
1234 4
10
12345 5
15
.....
求第i位是什么

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<queue>
#include<vector>
#include<math.h>
using namespace std;
const int MAX = 32000;
unsigned a[MAX], b[MAX];
void creat()
{
a[1] = b[1] = 1;
for(int i = 2; i<MAX;++i)
{
a[i] = a[i-1]+(int)log10((double)i)+1;
b[i] = b[i-1]+a[i];
}
}
int f(int x)
{
int i = 1;
while(b[i]<x)++i;
int pos = x-b[i-1];
int len = 0;
for(i = 1; len<pos; ++i)
{
len+=(int)log10((double)i)+1;
}
return (i-1)/(int)pow((double)10, len-pos)%10;
}
int main()
{
creat();
int t, x;
scanf("%d", &t);
while(t--)
{
scanf("%d", &x);
printf("%d\n", f(x));
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: