题目描述
数字以0123456789101112131415..的格式序列化到一个字符序列中,在这个序列中,第5位(从0开始计数)是5,第13位是1,第19位是4..请写一个函数,求任意第n位对应的数字。
解决:
一定要记清楚,是从0开始计数的!!!
public static int digitAtIndex(int index) {
if(index<0) return -1;
int digits=1;
while(true) {
int numbers=countOf(digits);
if(index<numbers*digits) {
return digitsAtIndex(index,digits);
}
index-=digits*numbers;
digits++;
}
}
//计算digits位数有多少个数字(如两位数有90个)
public static int countOf(int digits) {
if(digits==1) return 10;
return 9*(int)(Math.pow(10, digits-1));
}
public static int digitsAtIndex(int index,int digits) {
//从digits位数的第几个数开始
int number=index/digits;
if(digits>1) {
//所求的数字在的那个数
number+=(int)(Math.pow(10, digits-1));
}
//在这个数中的哪一位(从右向左)
int indexFromRight=digits-index%digits;
for(int i=1;i<indexFromRight;i++) {
number/=10;
}
return number%10;
}