###### tags: `leetcode` `medium` `Math`
# [7. Reverse Integer](https://leetcode.com/problems/reverse-integer/)
## Description
Given a signed 32-bit integer `x`, return `x` with its digits reversed. If reversing `x` causes the value to go outside the signed 32-bit integer range $[-2^{31}, 2^{31} - 1]$, then return `0`.
**Assume the environment does not allow you to store 64-bit integers (signed or unsigned).**
## Examples
### Example 1:
**Input**: x = 123
**Output**: 321
### Example 2:
**Input**: x = -123
**Output**: -321
### Example 3:
**Input**: x = 120
**Output**: 21
## Constraints:
- $-2^{31} \leq x \leq 2^{31} - 1$
## Code
```c=
#include <limits.h>
int reverse(int x) {
int* check = malloc(sizeof(int));
int negative = (x < 0), first = x % 10, remain = x / 10, res = 0;
while (remain != 0) {
// By negative number or not checking whether it will get overflow after times 10
if (negative ? (INT_MIN / 10 <= res) : (INT_MAX / 10 >= res)) {
res *= 10;
// By negative number or not checking whether it will get overflow after plus first
if (negative ? (INT_MIN - first <= res) : (INT_MAX - first >= res))
res += first;
else
return 0;
}
else
return 0;
// Re-update first and remain
first = remain % 10;
remain = remain / 10;
}
// If there still has any un-operating number in first
if (first != 0) {
if (negative ? (INT_MIN / 10 <= res) : (INT_MAX / 10 >= res)) {
res *= 10;
if (negative ? (INT_MIN - first <= res) : (INT_MAX - first >= res))
return res += first;
}
else
return 0;
}
return res;
}
```
## Complexity
|Space |Time |
|- |- |
|$O(1)$|$O(N)$|
## Result
- Runtime : 0ms, 100%
- Memory usage : 5.7mb, 36.75%