Edited at

Go で複数桁の数字を slice に入れたい時、そして reverse させたい時


Go で int と slice をいい感じに扱いたい

こんなん考えたらわかるやろって感じの内容なのかもしれませんが、ググってもいい感じのが出なかったのでメモとして残しておきます。

競技プログラミングとかで使えるかも!


Go で int を1桁ずつ slice に入れる

見てみればなんだこんなもんかって感じです。除算と余りをいい感じに使う再帰関数になってます。

func digit(i int, list []int) []int {

if i > 0 {
return digit(i/10, append(list, i%10))
}
return list
}


Go で int の slice を逆転したい

作った int の slice を reverse したいときもありますよね?

そういうときはこれです。ループで頑張って入れ替えます。

func reverse(numbers []int) []int {

for i := 0; i < len(numbers)/2; i++ {
j := len(numbers) - i - 1
numbers[i], numbers[j] = numbers[j], numbers[i]
}
return numbers
}


int を 1 桁ずつ slice にして逆転する

上記の2つの関数を合わせてこんな感じで使います。

地道にやればなんでもいけますね!

package main

import (
"fmt"
)

func main() {
result := 708
var list []int
fmt.Println(digit(result, list))
}

func digit(i int, list []int) []int {
if i > 0 {
return digit(i/10, append(list, i%10))
}
return reverse(list)
}

func reverse(numbers []int) []int {
for i := 0; i < len(numbers)/2; i++ {
j := len(numbers) - i - 1
numbers[i], numbers[j] = numbers[j], numbers[i]
}
return numbers
}