Go將整數的每個位數拆為slice,例如123
轉為[1, 2, 3]
。
下面的IntToSlice()
函式把正整數拆為slice陣列(不考慮負數)。
main.go
package main
import (
"fmt"
)
func main() {
fmt.Println(IntToSlice(123)) // [1 2 3]
fmt.Println(IntToSlice(1)) // [1]
fmt.Println(IntToSlice(-123)) // []
fmt.Println(IntToSlice(0)) // 0
}
func IntToSlice(num int) []int {
if num == 0 {
return return []int{0}
}
var ints = make([]int, 0)
for num > 0 {
rem := num % 10 // 除以10的餘數
ints = append(ints, rem)
num /= 10
}
return Reverse(ints)
}
// [3,2,1] => [1,2,3]
func Reverse(ints []int) []int {
i := 0
j := len(ints) - 1
for i < j {
ints[i], ints[j] = ints[j], ints[i] // 位置對調
i++
j--
}
return ints
}
另一種方式。
main.go
package main
import (
"fmt"
)
func main() {
fmt.Println(IntToSlice(123)) // [1 2 3]
fmt.Println(IntToSlice(1)) // [1]
fmt.Println(IntToSlice(-123)) // []
fmt.Println(IntToSlice(0)) // 0
}
func IntToSlice(num int) []int {
if num == 0 {
return return []int{0}
}
var ints = make([]int, CountDigits(num))
i := 0
for num > 0 {
rem := num % 10
ints[len(ints)-1-i] = rem
num /= 10
i++
}
return ints
}
func CountDigits(num int) int {
count := 0
for num >= 1 {
num /= 10
count++
}
return count
}
沒有留言:
張貼留言