题目:
find the nth digit |
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) |
Total Submission(s): 689 Accepted Submission(s): 244 |
Problem Description
假设:
S1 = 1 S2 = 12 S3 = 123 S4 = 1234 ......... S9 = 123456789 S10 = 1234567891 S11 = 12345678912 ............ S18 = 123456789123456789 .................. 现在我们把所有的串连接起来 S = 1121231234.......123456789123456789112345678912......... 那么你能告诉我在S串中的第N个数字是多少吗? |
Input
输入首先是一个数字K,代表有K次询问。
接下来的K行每行有一个整数N(1 <= N < 2^31)。 |
Output
对于每个N,输出S中第N个对应的数字.
|
Sample Input
6 1 2 3 4 5 10 |
Sample Output
1 1 2 1 2 4 |
Author
8600
|
Source
HDU 2007-Spring Programming Contest - Warm Up (1)
|
Recommend
8600
|
题目分析:
S串由1 12 123 1234 12345.....这样的序列组成。求S串中第n个位置上的数字是什么。这道题可以先确定第n个位置在第几数字串,然后在求在这个数字串中的第几个位置。
代码如下:
/*
* e.cpp
*
* Created on: 2015年2月16日
* Author: Administrator
*/
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
int t;
scanf("%d",&t);
while(t--){
int n;
scanf("%d",&n);
int a = 1;//a表示当前串s的数字的个数
while(n > a){//如果第n个位置不在当前串中
n -= a;//则将n减去当前串所包含的数字的个数
a++;//计算下一个串的数字的个数
}
//执行到这里的时候,说明第n个位置在当前串s中
n %= 9;//因为每一个都是在串1~9之间循环
if(n == 0){//用于处理一下n==9的时候
n = 9;
}
printf("%d\n",n);
}
return 0;
}