56 lines
626 B
Go
56 lines
626 B
Go
package q8
|
|
|
|
const (
|
|
MIN = -(1 << 31)
|
|
MAX = 1<<31 - 1
|
|
)
|
|
|
|
func myAtoi(s string) int {
|
|
sign := 0
|
|
num := 0
|
|
|
|
Loop:
|
|
for i := range len(s) {
|
|
c := s[i]
|
|
|
|
switch c {
|
|
case '-':
|
|
if sign != 0 {
|
|
break Loop
|
|
}
|
|
sign = -1
|
|
|
|
case '+':
|
|
if sign != 0 {
|
|
break Loop
|
|
}
|
|
sign = 1
|
|
|
|
case ' ':
|
|
if sign != 0 {
|
|
break Loop
|
|
}
|
|
|
|
default:
|
|
if c < '0' || c > '9' {
|
|
break Loop
|
|
}
|
|
if sign == 0 {
|
|
sign = 1
|
|
}
|
|
num = num*10 + int(c-'0')
|
|
if sign*num < MIN {
|
|
num = -MIN
|
|
break Loop
|
|
}
|
|
if sign*num > MAX {
|
|
num = MAX
|
|
break Loop
|
|
}
|
|
}
|
|
}
|
|
|
|
return sign * num
|
|
}
|
|
|
|
var _ = myAtoi
|