面试题44: 数字序列中的某一位的数字
题目:数字以0123456789101112131415…的格式序列化到一个字符序列中,在这个序列中,第5位(从0开始计数)是5,第13位是1,第19位是4,等等。请写一个函数,求任意第n位对应的数字。
解题思路:
0 : 1
1~9 : 9
10~99 : 9×10×2
…
归纳得:
k位数总位数为 : 9×10^(k-1)×k // 除了0
int digitAtIndex(int index) {
if (index < 0) {
return -1;
}
if (index == 0) {
return 0;
}
index -= 1;
int i = 0;
for (i = 1; ;++i) {
if (index < 9 * PowerBase10(i-1) * i) {
break;
}
index -= 9 * PowerBase10(i-1)*i;
}
// 位数i
int number = PowerBase10(i-1) + index / i;
int indexFromRight = i - index % i;
for (int j = 1; j < indexFromRight; ++j) {
number /= 10;
}
return number % 10;
}