Tabla de contenido
Descripción del Título
Dado un entero de 32 bits con signo, debe invertir los dígitos de cada bit del entero. Para números de 32 bits desbordados, se devuelve 0.
Descripción de entrada / salida
ingresar | 321 |
Producción | 123 |
solución
El tema es relativamente simple y debes prestar atención a dos lugares:
- El número ingresado puede ser negativo. El número negativo sigue siendo negativo después de la inversión
- Si el número invertido supera los 32 bits, debe devolver 0
Código
package main
import "strconv"
func reverse(x int) int {
positive := true
if x < 0 {
positive = false
x = -x
}
xStr := strconv.Itoa(x)
resultStr := ""
for i := len(xStr) - 1; i >= 0; i-- {
resultStr += string(xStr[i])
}
result, _ := strconv.Atoi(resultStr)
if !positive {
result = -result
}
if result < -(1<<31) || result > (1<<31)-1 {
result = 0
}
return result
}
Tutorial de código
package main
import "strconv"
func reverse(x int) int {
// 先判断x的正负性。记录后将x统一转换为正数(方便逆序)
positive := true
if x < 0 {
positive = false
x = -x
}
// 将x转换为字符串逆序,得到逆序后的字符串
xStr := strconv.Itoa(x)
resultStr := ""
for i := len(xStr) - 1; i >= 0; i-- {
resultStr += string(xStr[i])
}
// 根据先前记录的正负性,将逆序后的字符串还原为整数结果
result, _ := strconv.Atoi(resultStr)
if !positive {
result = -result
}
// 判断是否溢出32位
if result < -(1<<31) || result > (1<<31)-1 {
result = 0
}
return result
}