def reverse(n: int) -> int:

    INT_MIN, INT_MAX = -2**31, 2**31 - 1

    sign = -1 if n < 0 else 1
    n = abs(n)

    reversed_n = 0
    while n != 0:
        reversed_n = reversed_n * 10 + n % 10
        n //= 10

    reversed_n *= sign

    if reversed_n < INT_MIN or reversed_n > INT_MAX:
        return 0
    
    return reversed_n

print(reverse(123))   # 321

print(reverse(-123))  # -321

print(reverse(120))   #  21

print(reverse(119))   #  911

print(reverse(- 300))   #  21