Reverse int golang

huangapple go评论91阅读模式
英文:

Reverse int golang

问题

如何将12345变为54321
使用字符串,你可以将字符串转换为rune,然后反转它,但是对于整数来说,你不能做同样的操作。我搜索了一下,没有找到任何人讨论这个问题。示例:
131415 >>> 514131
1357 >>> 7531
123a >>> 错误
-编辑-
我在想,为什么不创建一个slice并对其进行索引呢?
然后我意识到你不能对int进行索引。
(http://play.golang.org/p/SUSg04tZsc)
我的新问题是
如何对一个整数进行索引?
或者
如何反转一个整数?

英文:

How to change 12345 to 54321?
With a string, you can change the string to a rune, and reverse it, but you cannot do the same for an integer. I have searched and found no one talking about this. Examples
131415 >>> 514131
1357 >>> 7531
123a >>> ERROR
-EDIT-
I was thinking, why not create a slice and index that?
Then I realized that you can't index int
(http://play.golang.org/p/SUSg04tZsc)
MY NEW QUESTION IS
How do you index an int?
OR
How do you reverse a int?

答案1

得分: 12

这是一个不使用索引的解决方案,用于反转一个整数:

package main

import (
	"fmt"
)

func reverse_int(n int) int {
	new_int := 0
	for n > 0 {
		remainder := n % 10
		new_int *= 10
		new_int += remainder 
		n /= 10
	}
	return new_int 
}

func main() {
	fmt.Println(reverse_int(123456))
	fmt.Println(reverse_int(100))
	fmt.Println(reverse_int(1001))
	fmt.Println(reverse_int(131415))
	fmt.Println(reverse_int(1357))
}

结果:

654321
1
1001
514131
7531

Go playground

英文:

Here is a solution that does not use indexing an int

package main

import (
	"fmt"
)

func reverse_int(n int) int {
	new_int := 0
	for n > 0 {
		remainder := n % 10
		new_int *= 10
		new_int += remainder 
		n /= 10
	}
	return new_int 
}

func main() {
	fmt.Println(reverse_int(123456))
	fmt.Println(reverse_int(100))
	fmt.Println(reverse_int(1001))
	fmt.Println(reverse_int(131415))
	fmt.Println(reverse_int(1357))
}

Result:

654321
1
1001
514131
7531

Go playground

答案2

得分: 3

我将整数转换为字符串,反转字符串,然后将结果转换回字符串。

package main

import (
	"fmt"
	"strconv"
)

func main() {

	fmt.Println(reverse_int(123456))
	fmt.Println(reverse_int(100))
	fmt.Println(reverse_int(1001))
	fmt.Println(reverse_int(131415))
	fmt.Println(reverse_int(1357))

}

func reverse_int(value int) int {

	intString := strconv.Itoa(value)

	newString := ""

	for x := len(intString); x > 0; x-- {
		newString += string(intString[x-1])
	}

	newInt, err := strconv.Atoi(newString)

	if err != nil {
		fmt.Println("Error converting string to int")
	}

	return newInt
}

请注意,这是一个将整数反转的Go语言代码示例。

英文:

I converted the integer to a string, reverse the string, and convert the result back to a string.

package main

import (
	"fmt"
	"strconv"
)

func main() {

	fmt.Println(reverse_int(123456))
    	fmt.Println(reverse_int(100))
    	fmt.Println(reverse_int(1001))
    	fmt.Println(reverse_int(131415))
    	fmt.Println(reverse_int(1357))
	
}

func reverse_int(value int) int {

	intString := strconv.Itoa(value)

	newString := ""
	
	for x := len(intString); x > 0; x-- {
		newString += string(intString[x - 1])
	}

	newInt, err := strconv.Atoi(newString)

	if(err != nil){
		fmt.Println("Error converting string to int")
	}
	
	return newInt
}

答案3

得分: 3

与第一个答案非常相似,但这个检查确保您不会超出类型的边界。

func reverse(x int) int {    
    rev := 0
    for x != 0 {
        pop := x % 10
        x /=  10
        if rev > math.MaxInt32/10 || (rev == math.MaxInt32 /10 && pop > 7) {
            return 0
        }
        if rev < math.MinInt32/10 || (rev == math.MinInt32/10 && pop < -8) {
            return 0
        }
        rev = rev * 10 + pop
    }
    
    return rev
}
英文:

Very similar to the first answer but this checks to make sure you don't go out of bounds on the type.

func reverse(x int) int {    
    rev := 0
    for x != 0 {
        pop := x % 10
        x /=  10
        if rev &gt; math.MaxInt32/10 || (rev == math.MaxInt32 /10 &amp;&amp; pop &gt; 7) {
            return 0
        }
        if rev &lt; math.MinInt32/10 || (rev == math.MinInt32/10 &amp;&amp; pop &lt; -8) {
            return 0
        }
        rev = rev * 10 + pop
    }
    
    return rev
}

答案4

得分: 1

也会翻转负数 int

func Abs(x int) int {
  if x < 0 {
    return -x
  }
  return x
}

func reverse_int(n int) int {
  newInt := 0
  sign := 1
  if n < 0 {
    sign = -1
  }
  n = Abs(n)
  for n > 0 {
    remainder := n % 10
    newInt = newInt*10 + remainder
    n /= 10
  }
  return newInt * sign 
}

func main() {
  fmt.Println(reverse_int(-100))
  fmt.Println(reverse_int(-1001))
  fmt.Println(reverse_int(131415))
  fmt.Println(reverse_int(1357))
}
英文:

Also flips negative numbers int

func Abs(x int) int {
  if x &lt; 0 {
	return -x
  }
   return x
}

func reverse_int(n int) int {
  newInt := 0
  sign := 1
   if n &lt; 0 {
	sign = -1
   }
   n = Abs(n)
  for n &gt; 0 {
	remainder := n % 10
	newInt = newInt*10 + remainder
	n /= 10
  }
  return newInt * sign 
}

func main() {
  fmt.Println(reverse_int(-100))
  fmt.Println(reverse_int(-1001))
  fmt.Println(reverse_int(131415))
  fmt.Println(reverse_int(1357))
}

答案5

得分: 0

与Fokiruna的答案类似,但还检查了32位溢出。

func reverse(x int) int {
    result, sign := 0, 1
 
    if(x < 0) {
        sign = -1
        x = -x     
    }

    for x > 0 {
        remainder := x % 10;
        result = result * 10 + remainder
        x = x/10
    }
    
    var checkInt int = int(int32(result))

	if checkInt != result {
		return 0
	}

    return result * sign
}
英文:

Similar to Fokiruna's answer but also checks for a 32bit overflow

func reverse(x int) int {
    result, sign := 0, 1
 
    if(x &lt; 0) {
        sign = -1
        x = -x     
    }

    for x &gt; 0 {
        remainder := x % 10;
        result = result * 10 + remainder
        x = x/10
    }
    
    var checkInt int = int(int32(result))

	if checkInt != result {
		return 0
	}

    return result * sign
}

huangapple
  • 本文由 发表于 2016年3月14日 00:11:48
  • 转载请务必保留本文链接:https://go.coder-hub.com/35972561.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定