Skip to content

Instantly share code, notes, and snippets.

@DQNEO
Last active June 18, 2024 04:44
Show Gist options
  • Select an option

  • Save DQNEO/9510a9ba67ddf754f4929ecfc8bd8849 to your computer and use it in GitHub Desktop.

Select an option

Save DQNEO/9510a9ba67ddf754f4929ecfc8bd8849 to your computer and use it in GitHub Desktop.
Itoa from scratch
package main
func Itoa(ival int) string {
var buf []byte
var r []byte
var next int
var right int
for {
if ival < 0 {
ival = -1 * ival
r = append(r, '-')
}
next = ival /10
right = ival - next*10
ival = next
buf = append(buf, byte('0' + right))
if ival == 0 {
break
}
}
for j:=0;j<len(buf);j++ {
r = append(r, buf[len(buf)-j-1])
}
return string(r)
}
func main() {
println(Itoa(1234567890))
println(Itoa(54321))
println(Itoa(1))
println(Itoa(0))
println(Itoa(-1))
println(Itoa(-54321))
println(Itoa(-1234567890))
}
@DQNEO
Copy link
Author

DQNEO commented Apr 2, 2020

No-slice version

https://play.golang.org/p/uC1wGqhZm_7

package main

var buf [100]uint8
var r [100]uint8

func Itoa(ival int) string {
	var next int
	var right int
	var ix int
	if ival == 0 {
		return "0"
	}
	var minus bool
	for ix = 0; ival != 0; ix++ {
		if ival < 0 {
			ival = -1 * ival
			minus = true
			r[0] = '-'
			continue
		}
		next = ival / 10
		right = ival - next*10
		ival = next
		buf[ix] = uint8('0' + right)
	}

	for j := 0; j < ix; j++ {
		c := buf[ix-j-1]
		if minus {
			r[j+1] = c
		} else {
			r[j] = c
		}
	}
	return string(r[0:ix])
}

func main() {
	println(Itoa(1234567890))
	println(Itoa(54321))
	println(Itoa(1))
	println(Itoa(0))
	println(Itoa(-1))
	println(Itoa(-54321))
	println(Itoa(-1234567890))
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment