LeetCode——Nth Digit

Question

Find the nth digit of the infinite integer sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...

Note:
n is positive and will fit within the range of a 32-bit signed integer (n < 231).

Example 1:

Input:
3

Output:
3

Example 2:

Input:
11

Output:
0

Explanation:
The 11th digit of the sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... is a 0, which is part of the number 10

Solution

就是统计位数,然后注意越界的问题,所以应该用long.

Code

class Solution {
public:
    int findNthDigit(int n) {
        if (n < 10)
            return n;
        int i = 1;
        long pre = 0;
        while (1) {
            long value = i * 9 * pow(10, i - 1);
            if (n > value) {
                pre += value;
                i++;
            }
            else {
                break;
            }
        }
        long remain = n - pre;
        long y = remain / i;
        long z = remain % i;
        i--;
        long start;
        if (z > 0)
            start = pow(10, i) + y;
        else
            start = pow(10, i) + y - 1;
        stringstream ss;
        ss << start;
        string str;
        ss >> str;
        if (z > 0)
            return (str[z - 1]) - 48;
        else
            return (str[str.length() - 1]) - 48;
    }
};
posted @ 2017-09-24 19:17  清水汪汪  阅读(179)  评论(0编辑  收藏  举报