Golang中如何初始化big.Int类型的值
Golang中如何初始化big.Int类型的值 你好,我需要用一个有400位数字的整数来初始化一个 big.Int 值。但是当我的代码像下面这样时:
var N big.Int
N = 2014096878945207511726700485783442547915321782072704356103039129009966793396141985086509455102260403208695558793091390340438867513766123418942845301603261911930567685648626153212566300102683464717478365971313989431406854640516317519403149294308737302321684840956395183222117468443578509847947119995373645360710979599471328761075043464682551112058642299370598078702810603300890715874500584758146849481
我遇到了一个“常量过大”的错误。有人能告诉我初始化它的最佳方法吗? 谢谢
更多关于Golang中如何初始化big.Int类型的值的实战教程也可以访问 https://www.itying.com/category-94-b0.html
3 回复
您可以使用 SetString/2 方法
更多关于Golang中如何初始化big.Int类型的值的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
以下是一个示例 https://play.golang.org/p/QhrZzhpZMI6
package main
import (
"fmt"
"math/big"
)
func main() {
i := new(big.Int)
Num := "2014096878945207511726700485783442547915321782072704356103039129009966793396141985086509455102260403208695558793091390340438867513766123418942845301603261911930567685648626153212566300102683464717478365971313989431406854640516317519403149294308737302321684840956395183222117468443578509847947119995373645360710979599471328761075043464682551112058642299370598078702810603300890715874500584758146849481"
i.SetString(Num, 10)
fmt.Println(i)
fmt.Println(Num)
}
在Go中,直接使用大整数常量初始化big.Int会导致编译错误,因为Go的整数常量有大小限制。你可以使用SetString方法来初始化大整数。
以下是两种常用的方法:
方法1:使用SetString(推荐)
package main
import (
"fmt"
"math/big"
)
func main() {
var N big.Int
N.SetString("2014096878945207511726700485783442547915321782072704356103039129009966793396141985086509455102260403208695558793091390340438867513766123418942845301603261911930567685648626153212566300102683464717478365971313989431406854640516317519403149294308737302321684840956395183222117468443578509847947119995373645360710979599471328761075043464682551112058642299370598078702810603300890715874500584758146849481", 10)
fmt.Println("N =", N.String())
}
方法2:使用NewInt配合SetString
package main
import (
"fmt"
"math/big"
)
func main() {
N := new(big.Int)
N.SetString("2014096878945207511726700485783442547915321782072704356103039129009966793396141985086509455102260403208695558793091390340438867513766123418942845301603261911930567685648626153212566300102683464717478365971313989431406854640516317519403149294308737302321684840956395183222117468443578509847947119995373645360710979599471328761075043464682551112058642299370598078702810603300890715874500584758146849481", 10)
fmt.Println("N =", N)
}
方法3:使用文本块(Go 1.13+)
package main
import (
"fmt"
"math/big"
)
func main() {
N := new(big.Int)
N.SetString(`2014096878945207511726700485783442547915321782072704356103039129009966793396141985086509455102260403208695558793091390340438867513766123418942845301603261911930567685648626153212566300102683464717478365971313989431406854640516317519403149294308737302321684840956395183222117468443578509847947119995373645360710979599471328761075043464682551112058642299370598078702810603300890715874500584758146849481`, 10)
fmt.Println("N =", N)
}
关键点:
- 将大整数作为字符串传递
- 使用
SetString方法,第二个参数10表示十进制 - 确保字符串中只包含有效的数字字符
这些方法都能正确处理400位的大整数,不会遇到"常量过大"的错误。

