博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 1019, Number Sequence
阅读量:5967 次
发布时间:2019-06-19

本文共 1998 字,大约阅读时间需要 6 分钟。

Time Limit: 1000MS  Memory Limit: 10000K

Total Submissions: 17288  Accepted: 4563

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

 

Source

Tehran 2002, First Iran Nationwide Internet Programming Contest


//
 POJ1019.cpp : Defines the entry point for the console application.
//
#include 
<
iostream
>
#include 
<
sstream
>
using
 
namespace
 std;
inline 
int
 getlen(
int
 i)
{
    
if
 (i 
<
 
10
return
 
1
;
    
else
 
if
 (i 
<
 
100
return
 
2
;
    
else
 
if
 (i 
<
 
1000
return
 
3
;    
    
else
 
if
 (i 
<
 
10000
return
 
4
;    
    
else
 
if
 (i 
<
 
100000
return
 
5
;
    
return
 
0
;
}
inline 
char
 getchar(
int
 num, 
int
 p)
{
    stringstream ss;
    ss 
<<
 num;
    
string
 s;
    ss 
>>
 s;
    
return
 s[p
-
1
];
}
int
 main(
int
 argc, 
char
*
 argv[])
{
    
//
init table
    
const
 
int
 SIZE 
=
 
40000
;
    __int64 sum[SIZE];
    sum[
0
]
=
0
;
    
for
(
int
 i 
=
 
1
;i 
<
 SIZE;
++
i)
        sum[i]
=
sum[i
-
1
]
+
getlen(i);
    
for
(
int
 i 
=
 
1
; i 
<
 SIZE; 
++
i)
        sum[i] 
+=
sum[i
-
1
];
    
int
 cases;
    scanf(
"
%d
"
&
cases);
    __int64 num;
    
for
 (
int
 c 
=
 
0
; c 
<
 cases; 
++
c)
    {
        scanf(
"
%I64d
"
&
num);
        
//
 Kth group
        
int
 k 
=
 
1
;
        
while
(sum[k] 
<
 num) 
++
k;
        
        
//
posth character of number i
        
int
 pos 
=
 num 
-
 sum[k
-
1
];
        
int
 i
=
1
;
        
while
(pos
-
getlen(i)
>
 
0
) pos 
-=
 getlen(i), 
++
i;
        cout 
<<
 getchar(i,pos) 
<<
 endl;
    }
    
return
 
0
;
}

转载于:https://www.cnblogs.com/asuran/archive/2009/10/17/1584885.html

你可能感兴趣的文章
Eclipse SVN修改用户名和密码
查看>>
架构师的职责都有哪些?
查看>>
SVN: bdb: BDB1538 Program version 5.3 doesn't match environment version 4.7
查看>>
jsp内置对象作业3-application用户注册
查看>>
android115 自定义控件
查看>>
iOS uuchart 用法
查看>>
c# 多线程 调用带参数函数
查看>>
JQuery 如何选择带有多个class的元素
查看>>
The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar
查看>>
VS快速生成JSON数据格式对应的实体
查看>>
Word2vec 模型载入(tensorflow)
查看>>
Linux内核——定时器和时间管理
查看>>
J2EE之初识JSP
查看>>
RabbitMq消息序列化简述
查看>>
i.e., e.g., etc.
查看>>
git忽略文件【转】
查看>>
Web上的支持的图片格式以及它们之间的区别
查看>>
随意而为
查看>>
jQuery监听文本框值改变触发事件(propertychange)
查看>>
HDU--2040
查看>>