You could solve it by two ways:
Using string operation on its decimal representation
Picking the char (digit) from decimal string representation of your positive integer:
int getDigitAtPosition(Integer integer, int zeroBasedPositionFromRight) {
// raise error if pos < 0 or pos >= length or length == 0
decimalRepresentation = integer.toString();
int rightMostPosition = decimalRepresentation.length() - 1;
int indexOfDigit = rightMostPosition - zeroBasedPositionFromRight;
char digitChar = decimalRepresentation.charAt(indexOfDigit);
return Integer.parseInt(digitChar);
}
Using mathematics (simple steps)
Or you can calculate it by (a) using modulo of higher power-10; then (b) subtracting lower power-10 (incl. its modulo); finally (c) divide by pos-power-10:
get pos 1 digit of 1234 = 3
becomes (a) 10^(1 +1) = 100er factor subtracted
1200 is subtracted, resulting in 34
then (b) 10^(1 -1) = 1er subtracted
4 is subtracted, resulting in 30
finally (c) integer-divide by 10^(1) (to neglect a possible remainder)
30 / 10 = 3 the desired digit's value
int getDigitAtPosition(Integer integer, int pos) {
// raise error if pos < 0 or pos >= length or length == 0
int higherUnit = 10^(pos +1) ; // a
int higherPart = (integer / higherUnit) * higherUnit;
int lowerUnit = 10^(pos -1); // b
int lowerPart = (integer / lowerUnit) * lowerUnit;
int posUnit = 10^(pos); // c
int digitAtPosition = (integer - higherPart - lowerPart) / posUnit;
return digitAtPosition;
}
Using mathematics (pow and modulo)
see related answer leveraging modular arithmetic:
More generally, the n-th digit of a number can be obtained by the formula: (number / base^(n-1)) % base