Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const MaxInt32 = 1<<31 - 1
- const MinInt32 = -1 << 31
- func myAtoi(str string) int {
- var gotTheFirstNumber bool = false
- var isNegative bool = false
- var isPositive bool = false
- digits := make([]int, 0)
- for _, c := range str {
- if !gotTheFirstNumber && !isMinus(c) && !isPlus(c) && !isSpace(c) && !isDigit(c) {
- return 0;
- }
- if isPositive && isNegative {
- return 0;
- }
- if !gotTheFirstNumber && isMinus(c) {
- if isNegative {
- return 0
- }
- isNegative = true
- gotTheFirstNumber = true
- continue
- }
- if !gotTheFirstNumber && isPlus(c) {
- if isPositive {
- return 0
- }
- isPositive = true
- gotTheFirstNumber = true
- continue
- }
- if gotTheFirstNumber && !isDigit(c) {
- break
- }
- if isDigit(c) {
- digits = append(digits, toNumber(c))
- gotTheFirstNumber = true
- }
- }
- out := 0
- multiplyFactor := 1
- if isNegative {
- multiplyFactor = -1
- }
- for i := len(digits) - 1; i > -1 ; i-- {
- if digits[i] == 0 {
- continue
- }
- fmt.Println("i =", i, "digits[i] = ", digits[i])
- out += digits[i] * powOf10(len(digits) - 1 - i) * multiplyFactor
- if out > MaxInt32 {
- return MaxInt32
- }
- if out < MinInt32 {
- return MinInt32
- }
- }
- return out
- }
- func isDigit(input rune) bool {
- return input <= '9' && input >= '0'
- }
- func isMinus(input rune) bool {
- return input == '-'
- }
- func isPlus(input rune) bool {
- return input == '+'
- }
- func isSpace(input rune) bool {
- return input == ' '
- }
- func toNumber(input rune) int {
- return int(input - '0')
- }
- func powOf10(in int) int {
- fmt.Println("in =", in)
- out := 1
- if in == 0 {
- return out
- }
- for i := 0; i < in; i++ {
- out = out*10
- if out > MaxInt32 {
- return MaxInt32
- }
- }
- return out
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement