public class E44findDigitInSequence {
public static int digitAtIndex(int index){
if (index < 0)
return -1;
int digits = 1;
while(true){
int countOfNumber = countOfIntegers(digits);
if (index < digits * countOfNumber)
return digitAtIndex(index, digits);
index -= digits * countOfNumber;
digits ++;
}
}
private static int digitAtIndex(int index, int digits) {
int goalNumber = startNumber(digits) + index / digits;
int indexFromRight = digits - index % digits;
for (int i = 1; i < indexFromRight; i ++)
goalNumber /= 10;
return goalNumber % 10;
}
private static int startNumber(int digits) {
if (digits == 1)
return 0;
return (int) Math.pow(10, digits -1);
}
private static int countOfIntegers(int digits) {
if (digits == 1)
return 10;
else
return 9 * (int) Math.pow(10, digits - 1);
}
public static void main(String[] args){
System.out.println(E44findDigitInSequence.digitAtIndex(1001));
}
}