# 整数反转
---
```javascript=
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0
```
:::success
```go=
// 使用的go的int to string
func reverse(x int) int {
symbol, result := intToSting(x) // 1.int to string
rsp, err := strconv.Atoi(result) // 2. string to int
if err != nil {
return -1
}
if symbol { // 正数同时保证不溢出
if rsp > math.MaxInt32 {
return 0
}
return rsp
} else { // 负数同时保证不溢出
if rsp * -1 < math.MinInt32 {
return 0
}
return rsp * -1
}
}
func intToSting(s int) (bool, string) { // int to sting 同时区分正负数字
result := strconv.Itoa(s)
if s >= 0 { // 正数
return true, reverseString(result)
} else { // 负数
return false, reverseString(strings.Split(result, "-")[1])
}
}
func reverseString(s string) string { // 字符串反转
result := []byte(s)
for i, j := 0, len(s) - 1; i < j; i, j = i + 1, j - 1 {
result[i], result[j] = result[j], result[i]
}
return string(result)
}
// 采用 % 10 取余 和 / 10 取商的方法
/*
123
循环条件是每次是否除10已除尽,除尽就终止循环
第一轮 :
123 % 10 = 3
123 / 10 = 12
此时得到的是逆向数字最高位,保存的结果是3,还需继续计算的是12
第二轮 :
12 % 10 = 2
12 / 10 = 1
此时得到的是逆向数字第二高位2, 最终保存的结果是3 * 10 + 2 = 32,还需继续计算的是1
第二轮 :
1 % 10 = 2
1 / 10 = 0 // 此时已除尽
此时得到的是逆向数字最后一位, 最终保存的结果是32 * 10 + 1= 321
*/
func reverse(x int) int {
result := reverseInt(x)
if result > 0 && result > math.MaxInt32 || result < 0 && result < math.MinInt32 {
return 0
}
return result
}
func reverseInt(i int) int {
result := 0
for i != 0 {
mod := i % 10
result = result * 10 + mod
i /= 10
}
return result
}
```
:::
###### tags: `LeeCode`