fork download
  1. class Solution:
  2. def reverse(self, x: int) -> int:
  3. # Limites de 32-bit signed integer
  4. INT_MAX = 2**31 - 1 # 2147483647
  5. INT_MIN = -2**31 # -2147483648
  6.  
  7. # Guardar o sinal e trabalhar com valor absoluto
  8. sign = -1 if x < 0 else 1
  9. x = abs(x)
  10.  
  11. # Reverter o número
  12. result = 0
  13. while x != 0:
  14. digit = x % 10
  15. x //= 10
  16.  
  17. # Verificar overflow ANTES de adicionar o dígito
  18. # Se result > INT_MAX // 10, então result * 10 causaria overflow
  19. if result > INT_MAX // 10:
  20. return 0
  21.  
  22. # Se result == INT_MAX // 10, precisamos verificar o dígito
  23. # Para INT_MAX = 2147483647, INT_MAX // 10 = 214748364
  24. # Se estamos neste valor e o próximo dígito > 7, teremos overflow
  25. if result == INT_MAX // 10:
  26. # Para números positivos: verificar se dígito > 7
  27. # Para números negativos: verificar se dígito > 8
  28. if (sign == 1 and digit > 7) or (sign == -1 and digit > 8):
  29. return 0
  30.  
  31. result = result * 10 + digit
  32.  
  33. return sign * result
  34.  
  35.  
  36. # Testes
  37. def test_solution():
  38. sol = Solution()
  39.  
  40. # Casos do exemplo
  41. print(f"reverse(123) = {sol.reverse(123)}") # Expected: 321
  42. print(f"reverse(-123) = {sol.reverse(-123)}") # Expected: -321
  43. print(f"reverse(120) = {sol.reverse(120)}") # Expected: 21
  44.  
  45. # Casos extremos
  46. print(f"reverse(0) = {sol.reverse(0)}") # Expected: 0
  47. print(f"reverse(1534236469) = {sol.reverse(1534236469)}") # Expected: 0 (overflow)
  48. print(f"reverse(-2147483648) = {sol.reverse(-2147483648)}") # Expected: 0 (overflow)
  49. print(f"reverse(2147483647) = {sol.reverse(2147483647)}") # Expected: 0 (overflow)
  50.  
  51. # Outros casos
  52. print(f"reverse(1000) = {sol.reverse(1000)}") # Expected: 1
  53. print(f"reverse(-1000) = {sol.reverse(-1000)}") # Expected: -1
  54.  
  55.  
  56. if __name__ == "__main__":
  57. test_solution()
Success #stdin #stdout 0.09s 14156KB
stdin
Standard input is empty
stdout
reverse(123) = 321
reverse(-123) = -321
reverse(120) = 21
reverse(0) = 0
reverse(1534236469) = 0
reverse(-2147483648) = 0
reverse(2147483647) = 0
reverse(1000) = 1
reverse(-1000) = -1