添加/减去两个数字字符串

Yif*_*ery 2 math biginteger go

我有两个变量,大数字设置为字符串:

var numA = "340282366920938463463374607431768211456"
var numB = "17014118346046923173168730371588410572"
Run Code Online (Sandbox Code Playgroud)

我希望能够在Go中添加和减去这些类型的大字符串数字.

我知道我需要使用,math/big但我仍然不能为我的生活弄清楚如何,所以任何示例帮助将不胜感激!

icz*_*cza 8

您可以使用big.NewInt()创建一个用big.Int值初始化的新int64值.它返回一个指针(*big.Int).或者你可以简单地使用内置new()函数来分配一个如下所示的big.Int0:new(big.Int)或者,因为它big.Int是一个结构类型,一个简单的复合文字也可以:&big.Int{}.

获得值后,您可以使用Int.SetString()解析并设置给定的数字string.您可以传递字符串编号的基数,它还会返回一个bool值,指示解析是否成功.

然后你可以使用Int.Add()Int.Sub()计算2个big.Int数字的和和差.请注意,Add()并将Sub()结果写入您调用其方法的接收器,因此如果您需要更改数字(操作数),请使用另一个big.Int值来计算和存储结果.

看这个例子:

numA := "340282366920938463463374607431768211456"
numB := "17014118346046923173168730371588410572"

ba, bb := big.NewInt(0), big.NewInt(0)
if _, ok := ba.SetString(numA, 10); !ok {
    panic("invalid numA")
}
if _, ok := bb.SetString(numB, 10); !ok {
    panic("invalid numB")
}

sum := big.NewInt(0).Add(ba, bb)
fmt.Println("a + b =", sum)

diff := big.NewInt(0).Sub(ba, bb)
fmt.Println("a - b =", diff)
Run Code Online (Sandbox Code Playgroud)

输出(在Go Playground上试试):

a + b = 357296485266985386636543337803356622028
a - b = 323268248574891540290205877060179800884
Run Code Online (Sandbox Code Playgroud)