当前位置:网站首页>Golang实现Biginteger大数计算

Golang实现Biginteger大数计算

2022-06-24 14:29:00 KunkkaWu

Golang中的big.Int库支持大数计算,基于这个库封装了一层Bitinteger,支持字符串类型的大数,加减乘除等计算。 其他计算可以参考基于big.Int来实现。

package BigIntege



import (

    "fmt"

    "math/big"

)



const DecBase = 10



// BigInteger wrapper for big.Int

type BigInteger struct {

    Value *big.Int

}



func NewBigInteger(value string) \*BigInteger {

    var val big.Int

    newVal, ok := val.SetString(value, DecBase)

    if ok {

        return &BigInteger{

            Value: newVal,

        }

    }

    return NewZeroBigInteger()

}



func NewZeroBigInteger() *BigInteger {

    return &BigInteger{

        Value: big.NewInt(0),

    }

}



func (x *BigInteger) Add(y *BigInteger) {

    x.Value = x.Value.Add(x.Value, y.Value)

}



func (x *BigInteger) Sub(y *BigInteger) {

    x.Value = x.Value.Sub(x.Value, y.Value)

}



// Cmp compares x and y and returns:

//

//   -1 if x <  y

//    0 if x == y

//   +1 if x >  y

func (x *BigInteger) Cmp(y *BigInteger) int {

    return x.Value.Cmp(y.Value)

}



func (x *BigInteger) String() string {

    return x.Value.String()

}



// Sum 加法

func Sum(x, y *BigInteger) *BigInteger {

    z := NewZeroBigInteger()

    z.Add(x)

    z.Add(y)

    return z

}



// Sub 减法

func Sub(x, y *BigInteger) *BigInteger {

    z := NewBigInteger(x.String())

    z.Sub(y)

    return z

}



// Mul 惩罚

func Mul(x, y \*BigInteger) \*BigInteger {

    t := NewZeroBigInteger()

    z := t.Value.Mul(x.Value, y.Value)

    return &BigInteger{Value: z}

}



// Div 除法

func Div(x, y *BigInteger) *BigInteger {

    t := NewZeroBigInteger()

    z := t.Value.Div(x.Value, y.Value)

    return &BigInteger{Value: z}

}



func isValidBigInt(val string) error {

    _, ok := big.NewInt(0).SetString(val, 10)

    if !ok {

        return fmt.Errorf("parse string to big.Int failed, actual: %s", val)

    }

    return nil

}
原网站

版权声明
本文为[KunkkaWu]所创,转载请带上原文链接,感谢
https://cloud.tencent.com/developer/article/2029133