Combine two numbers
Asked Answered
S

2

5

How can I archive the following in Go? Let's say I have two int32 which both have the value 33.
How can I combine them into one int32 with the value 3333 instead of 66?

Sniggle answered 19/1, 2015 at 16:41 Comment(0)
U
9
var a, b int32 = 33, 33
a = a*100 + b
fmt.Println(a)

Playground.

Edit: Here is a version which computes the padding depending on the number:

func main() {
    var a, b int32 = 1234, 456
    a = a*padding(b) + b
    fmt.Println(a)
}

func padding(n int32) int32 {
    var p int32 = 1
    for p < n {
        p *= 10
    }
    return p
}

Playground.

Note that you should also check that int32 won't overflow. If you don't want to worry about overflows, you can use a big.Int instead.

Uvular answered 19/1, 2015 at 16:46 Comment(2)
Yeah but what if the values are different, let's say 1223 and 5644 ?Sniggle
In padding p must be initialized with 10 to be also correct for b in { 0, 1 }Duran
L
5

I have no idea about the performance, compared to Ainar-G's solution, but what about this:

var a, b int32 = 33, 33
result, err := strconv.Atoi(fmt.Sprintf("%d%d", a, b))
if err != nil {
    panic(err)
}        
fmt.Println(int32(result))
Laic answered 19/1, 2015 at 17:25 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.