public int reverse(int x) {
  int reversed = 0;
  
  while( x != 0) {
    int digit = x % 10;
    x = x / 10;
    
     if (reversed > Integer.MAX_VALUE / 10 || 
         (reversed == Integer.MAX_VALUE / 10 && digit > 7)) {
       return 0; 
    }
    if (reversed < Integer.MIN_VALUE / 10 || 
        (reversed == Integer.MIN_VALUE / 10 && digit < -8)) {
      return 0; 
    }
    
    reversed = reversed * 10 + digit
  }
  return reversed;
}