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)
}

关键点:

  1. 将大整数作为字符串传递
  2. 使用SetString方法,第二个参数10表示十进制
  3. 确保字符串中只包含有效的数字字符

这些方法都能正确处理400位的大整数,不会遇到"常量过大"的错误。

回到顶部