首页 > ACM题库 > HDU-杭电 > HDU 1597 find the nth digit[解题报告] C++
2013
12-12

HDU 1597 find the nth digit[解题报告] C++

find the nth digit

问题描述 :

假设:
S1 = 1
S2 = 12
S3 = 123
S4 = 1234
………
S9 = 123456789
S10 = 1234567891
S11 = 12345678912
…………
S18 = 123456789123456789
………………
现在我们把所有的串连接起来
S = 1121231234…….123456789123456789112345678912………
那么你能告诉我在S串中的第N个数字是多少吗?

输入:

输入首先是一个数字K,代表有K次询问。
接下来的K行每行有一个整数N(1 <= N < 2^31)。

输出:

对于每个N,输出S中第N个对应的数字.

样例输入:

6
1
2
3
4
5
10

样例输出:

1
1
2
1
2
4

2011-12-30 18:25:02

地址:http://acm.hdu.edu.cn/showproblem.php?pid=1597

题意:中文。。。

mark:要用long long。

代码:

# include <stdio.h>
# include <math.h>


int main ()
{
    long long n, a ;
    scanf ("%I64d", &n) ;
    while (~scanf ("%I64d", &n))
    {
        a = (sqrt(1.0+8.0*n)-1) / 2 ;
        if (a*(a+1)/2 == n) a-- ;
        n = n-(a*(a+1)/2)-1 ;
        n %= 9 ;
        printf ("%I64d\n", n+1) ;
    }
    return 0 ;
}

解题报告转自:http://www.cnblogs.com/lzsz1212/archive/2012/01/07/2315417.html