题意:给定一个数字序列的长度,该序列为123456789010111213……组成。
求第k位的值。
考虑n位数的占位情况:
一位数:1~9,共有91;
二位数:10~99,共有902;
三位数:100~999,共有900*3;
以此类推,先求出第k位所在的是几位数,然后从该位数1…0开始找到那一位即可。
int findNthDigit(int n) {
#define ll long long
if (n <= 9) return n;
n -= 9;
ll num = 90, cnt = 2, start = 10;
while (num*cnt <= n) {
n -= num*cnt;
num *= 10;
start *= 10;
++cnt;
}
if (!n) return 9;
int x = n / cnt, r = n % cnt;
if (!r) return (start + x - 1) % 10;
int aim = start + x;
for (int i = 0; i < cnt-r; ++i) aim /= 10;
return aim % 10;
}