HDOJ 1597 find the nth digit

来源:互联网 发布:linux gcc 编译 编辑:程序博客网 时间:2024/06/16 22:27

find the nth digit




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
61234510
 

Sample Output
112124
解题思路:先找到第n个数属于哪个区域内,然后对9取余,有一个小技巧,用(n - 1) % 9 + 1,结果在1到9之间,不用另做判断。此题还有二分解法,想出来了再贴代码。

代码如下:

普通解法

#include <cstdio>#include <cmath>typedef long long ll;int main(){    int n,k;    int i,j;    scanf("%d",&k);    while(k--){        scanf("%d",&n);        i = 1;        while(n > i){            n -= i;            i++;        }        n = (n - 1) % 9 + 1;        printf("%d\n",n);    }    return 0;}


0 0