## 题目

> - 题号：7
> - 难度：简单
> - https://leetcode-cn.com/problems/reverse-integer/


给出一个 32 位的有符号整数，你需要将这个整数中每位上的数字进行反转。

<b>示例 1</b>:
```c
输入: 123
输出: 321
```

<b>示例 2</b>:
```c
输入: -123
输出: -321
```

<b>示例 3</b>:
```c
输入: 120
输出: 21
```
<b>示例 4</b>:
```c
输入: 1534236469
输出: 0
```
<b>示例 5</b>:
```c
输入: -2147483648
输出: 0
```


<b>注意</b>:

假设我们的环境只能存储得下 32 位的有符号整数，则其数值范围为`[−2^31, 2^31 − 1]`。请根据这个假设，如果反转后整数溢出那么就返回 0。

---
## 实现

<b>第一种：通过队列的方式</b>。

把负数转换为正数，通过“队列”统一处理。


- 状态：通过
- 1032 / 1032 个通过测试用例
- 执行用时: 56 ms, 在所有 C# 提交中击败了 93.28% 的用户
- 内存消耗: 13.9 MB, 在所有 C# 提交中击败了 13.98% 的用户

```c
public class Solution {
    public int Reverse(int x) {
        if (x == int.MinValue)
            return 0;

        long result = 0;
        int negative = x < 0 ? -1 : 1;
        x = negative * x;

        Queue<int> q = new Queue<int>();
        while (x != 0)
        {
            q.Enqueue(x % 10);
            x = x/10;
        }
            
        while (q.Count != 0)
        {
            result += q.Dequeue()*(long) Math.Pow(10, q.Count);
            if (negative == 1 && result > int.MaxValue)
            {
                result = 0;
                break;
            }
            if (negative == -1 && result*-1 < int.MinValue)
            {
                result = 0;
                break;
            }
        }
        return (int)result*negative;        
    }
}
```

