Golang中如何计算大整数数组的乘积
Golang中如何计算大整数数组的乘积
你好,我有一个包含多个 big.Int 的数组,需要计算所有元素的乘积(例如,在下面的简单例子中计算 3x5x7)。处理 big.Int 指针似乎有点棘手。有人能帮忙吗?谢谢!
package main
import (
"fmt"
"math/big"
)
func main() {
testarray := make([]*big.Int, 3)
entry1 := new(big.Int)
entry2 := new(big.Int)
entry3 := new(big.Int)
number1 := "3"
number2 := "5"
number3 := "7"
entry1.SetString(number1, 10)
entry2.SetString(number2, 10)
entry3.SetString(number3, 10)
testarray[0] = entry1
testarray[1] = entry2
testarray[2] = entry3
fmt.Println(testarray)
}
更多关于Golang中如何计算大整数数组的乘积的实战教程也可以访问 https://www.itying.com/category-94-b0.html
2 回复
如果你阅读了文档,事情会简单得多。
package main
import (
"fmt"
"math/big"
)
func main() {
testarray := []*big.Int{big.NewInt(3), big.NewInt(5), big.NewInt(7)}
fmt.Println(testarray)
var R *big.Int = big.NewInt(1)
for _, v := range testarray {
R.Mul(R, v)
}
fmt.Println(R)
}
更多关于Golang中如何计算大整数数组的乘积的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
可以直接使用 big.Int 的 Mul 方法遍历数组计算乘积。以下是示例代码:
package main
import (
"fmt"
"math/big"
)
func productOfBigInts(arr []*big.Int) *big.Int {
if len(arr) == 0 {
return big.NewInt(0)
}
result := big.NewInt(1)
for _, num := range arr {
result = new(big.Int).Mul(result, num)
}
return result
}
func main() {
testarray := make([]*big.Int, 3)
entry1 := new(big.Int)
entry2 := new(big.Int)
entry3 := new(big.Int)
number1 := "3"
number2 := "5"
number3 := "7"
entry1.SetString(number1, 10)
entry2.SetString(number2, 10)
entry3.SetString(number3, 10)
testarray[0] = entry1
testarray[1] = entry2
testarray[2] = entry3
product := productOfBigInts(testarray)
fmt.Println(product) // 输出: 105
}
对于空数组的情况,函数返回 0。如果希望返回 1,可以将 big.NewInt(0) 改为 big.NewInt(1)。
如果需要在原数组上直接计算,也可以这样实现:
func productOfBigIntsInline(arr []*big.Int) *big.Int {
if len(arr) == 0 {
return big.NewInt(0)
}
result := new(big.Int).Set(arr[0])
for i := 1; i < len(arr); i++ {
result.Mul(result, arr[i])
}
return result
}
两种方法都能正确处理 big.Int 指针的乘法运算。

