英文:
Golang: Combine two numbers
问题
你好!以下是你要翻译的内容:
我感觉很愚蠢问这个问题,但是我该如何在GO中实现以下操作?
假设我有两个int32变量,它们的值都是33。
我该如何将它们合并成一个值为3333的int32,而不是66?
英文:
I feel quite stupid asking this but 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?
答案1
得分: 9
var a, b int32 = 33, 33
a = a*100 + b
fmt.Println(a)
编辑: 这是一个根据数字计算填充的版本:
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
}
请注意,您还应该检查 int32 是否会溢出。如果您不想担心溢出,可以使用 big.Int。
英文:
var a, b int32 = 33, 33
a = a*100 + b
fmt.Println(a)
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
}
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.
答案2
得分: 4
我对性能与Ainar-G的解决方案相比没有什么概念,但是对于这个代码片段,你可以尝试以下方式:
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))
这段代码的作用是将两个整数 a
和 b
拼接成一个字符串,然后使用 strconv.Atoi
函数将该字符串转换为整数,并将结果打印出来。如果转换过程中出现错误,会触发一个 panic。
英文:
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))
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论