Advertisement
Guest User

Untitled

a guest
Jan 28th, 2020
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.16 KB | None | 0 0
  1. const MaxInt32 = 1<<31 - 1
  2. const MinInt32 = -1 << 31
  3.  
  4. func myAtoi(str string) int {
  5. var gotTheFirstNumber bool = false
  6. var isNegative bool = false
  7. var isPositive bool = false
  8. digits := make([]int, 0)
  9.  
  10. for _, c := range str {
  11. if !gotTheFirstNumber && !isMinus(c) && !isPlus(c) && !isSpace(c) && !isDigit(c) {
  12. return 0;
  13. }
  14. if isPositive && isNegative {
  15. return 0;
  16. }
  17. if !gotTheFirstNumber && isMinus(c) {
  18. if isNegative {
  19. return 0
  20. }
  21. isNegative = true
  22. gotTheFirstNumber = true
  23. continue
  24. }
  25. if !gotTheFirstNumber && isPlus(c) {
  26. if isPositive {
  27. return 0
  28. }
  29. isPositive = true
  30. gotTheFirstNumber = true
  31. continue
  32. }
  33. if gotTheFirstNumber && !isDigit(c) {
  34. break
  35. }
  36. if isDigit(c) {
  37. digits = append(digits, toNumber(c))
  38. gotTheFirstNumber = true
  39. }
  40. }
  41.  
  42. out := 0
  43. multiplyFactor := 1
  44. if isNegative {
  45. multiplyFactor = -1
  46. }
  47. for i := len(digits) - 1; i > -1 ; i-- {
  48. if digits[i] == 0 {
  49. continue
  50. }
  51. fmt.Println("i =", i, "digits[i] = ", digits[i])
  52. out += digits[i] * powOf10(len(digits) - 1 - i) * multiplyFactor
  53. if out > MaxInt32 {
  54. return MaxInt32
  55. }
  56. if out < MinInt32 {
  57. return MinInt32
  58. }
  59. }
  60.  
  61. return out
  62. }
  63.  
  64. func isDigit(input rune) bool {
  65. return input <= '9' && input >= '0'
  66. }
  67.  
  68. func isMinus(input rune) bool {
  69. return input == '-'
  70. }
  71.  
  72. func isPlus(input rune) bool {
  73. return input == '+'
  74. }
  75.  
  76. func isSpace(input rune) bool {
  77. return input == ' '
  78. }
  79.  
  80. func toNumber(input rune) int {
  81. return int(input - '0')
  82. }
  83.  
  84. func powOf10(in int) int {
  85. fmt.Println("in =", in)
  86. out := 1
  87. if in == 0 {
  88. return out
  89. }
  90. for i := 0; i < in; i++ {
  91. out = out*10
  92. if out > MaxInt32 {
  93. return MaxInt32
  94. }
  95. }
  96. return out
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement