Вы можете попытаться сделать это так, без приведения:
public int reverse(int x) {
int reversedNumber = 0;
int digitCount = 1;
x = Math.abs(x);
while (x >= 10) {
if(digitCount >= 9 && willOverflow(reversedNumber)){
return 0;
}
reversedNumber = reversedNumber * 10 + (x % 10);
x = x / 10;
digitCount++;
}
if(willOverflow(reversedNumber)){
return 0;
}
reversedNumber = reversedNumber * 10 + x;
if(reversedNumber < 0){
return 0;
}
return reversedNumber;
}
private boolean willOverflow(int reversedNumber) {
int tmpMultiply = reversedNumber * 10;
int tmpDivide = tmpMultiply / 10;
return tmpDivide != reversedNumber;
}
Если я верю, что вы можете проверить, переполнится ли целое число, умножив его на 10, а затем разделив на 10. Если значение в конце отличается от переданного значения, вы можете предположить, что целое число переполнится в следующей итерации (если будет быть следующей итерацией).