剑指offer44-AcWing-57. 数字序列中某一位的数字
数字以0123456789101112131415…的格式序列化到一个字符序列中。
在这个序列中,第5位(从0开始计数)是5,第13位是1,第19位是4,等等。
请写一个函数求任意位对应的数字。
样例
输入:13
输出:1
思路:
0-9有10个数,10-99,有90个数,100-999,有900个数…,按照这个顾虑先找属于哪一位,然后找属于是哪个数值的哪一位。
c++ code:
class Solution {
public:
int digitAtIndex(int n) {
//digit表示数值的位数,base用来记录第digit位数的第一个数值
long long digit = 1, digit_number = 9, base = 1;
//while循环求出数值是属于第几位的
//0-9有10个数,10-99,有90个数,100-999,有900个数......
while(n > digit * digit_number) {
n -= digit * digit_number;
digit++;
digit_number *= 10;
base *= 10;
}
//求具体是在哪个数值上
int number = base + (n + digit - 1) / digit - 1;
//从右边开始是属于第几位上的
int r = n % digit ? n % digit : digit;
for (int j = 0; j < digit - r; j++){
number /= 10;
}
return number % 10;
}
};