# [400. Nth Digit](https://leetcode.com/problems/nth-digit/description/)
# 思路
计算序列1、2、3、4、5、6、7、8、9、10、11...中第n个数字(digit，注意不是数)是什么。    
我们可以将这个序列分成很多类:
* 第一类：1、2、3...9共9(设为base，下同)个数, 即每个数只包含1(设为k，下同)个数字，一共有base * k = 9 个数字;
* 第二类：10、11、12...99，base = 90，k = 2;
* 第三类：100、101、102...999,base = 900，k = 3;
* ......   

设所求的digit落在数target上，则我们可根据上述规律算出target具体是多少，然后再算出所求具体是target的哪一个digit。   
注意：   
当我们算base * k 的时候，结果可能超过int的表示范围，所以要定义成long long型。
# C++
```C++
class Solution {
public:
    int findNthDigit(int n) {
        if(n < 10) return n;
        
        // 计算target
        long long base = 9, k = 1;
        while(n > base * k){
            n -= base * k;
            base *= 10;
            k++;
        }
        int target = base / 9 + (n - 1) / k;
        
        // 计算所求digit具体是target的哪一位
        while(n % k != 0) {
           target /= 10;
           n++;
        }
        return target % 10;
    }
};
```
