数字以 0123456789101112131415… 的格式序列化到一个字符序列中。
在这个序列中,第 5 位(从 0 开始计数)是 5,第 13 位是 1,第 19 位是 4,等等。
请写一个函数求任意位对应的数字。
样例
输入:13
输出:1
算法:
C++代码:
class Solution {
public:
int digitAtIndex(int n) {
//i表示位数 s表示该位数有多少个数 base表示位数起始值
long long i = 1, s = 9, base = 1;
while(n > i * s){
n -= i * s;
i++;
s *= 10;
base *= 10;
}
int number = base + (n + i - 1) / i - 1; //得到具体的这个数
int r = n % i ? n%i : i; //如果为0 说明就是这个数的个位
for(int k = 0; k < i - r; k++) number /= 10;
return number % 10;
}
};