本题源自leetcode 400
-------------------------------------------------------------
思路:1 1-9 有9 位数,10-99 有180 位。因此我们首先找到这个位数是几位数。
2 在找到这个数,然后确定这个数的第几位是我们要找的
代码:
int findNthDigit(int n) {
long base = 9,digits = 1;
// 1 计算这个数是几位数
while(n - base * digits > 0){
n -= base * digits;
base *= 10;
digits++;
}
//2 计算这个数是多少
int index = n % digits;
if(index == 0)
index = digits;
long num = 1;
for(int i = 1; i < digits; i++){
num *= 10;
}
num += (index == digits) ? n / digits -1 : n / digits;
//3 找到这个数的第几位是我们想要的
for(int i = index; i < digits; i++)
num /= 10;
return num % 10;
}