首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Golang BigInt分部

Golang BigInt分部
EN

Stack Overflow用户
提问于 2022-07-29 07:51:24
回答 1查看 234关注 0票数 2

我对函数有问题,我不明白为什么会发生这种情况。问题是:我有一个很大的数字,但是当我试图做一些除法运算时,我有零。守则是:

代码语言:javascript
复制
for {

        fmt.Println("number is", number)
        // key := number % 10
        key := number.Mod(number, big.NewInt(10))
        fmt.Println("key", key)
        // number = number / 10
        first := new(big.Int).Div(number, big.NewInt(10))
        fmt.Println("first ", first)

        number = first
        fmt.Println(number) //number = 0 always as a fisrt variable too
... }

退出的例子是:

代码语言:javascript
复制
number is 6689502913449127057588118054090372586752746333138029810295671352301633557244962989366874165271984981308157637893214090552534408589408121859898481114389650005964960521256960000000000000000000000000000
key  0
first  0
0

数字越来越多,Mod操作似乎也是正确的。Div操作不是。重点是什么?如何计算大数的基本除法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-29 07:59:40

问题是这条线:

代码语言:javascript
复制
key := number.Mod(number, big.NewInt(10))

你叫number.Mod(),它是Int.Mod()修改了,接收器是number,它把它设置为模,也就是0,所以在这个number之后,number会被归零。

您必须使用新的big.Int,就像用于Div()操作一样:

代码语言:javascript
复制
key := new(big.Int).Mod(number, big.NewInt(10))

围棋游乐场上试一试。

还请注意,有Int.DivMod()同时执行这两个操作(Div()Mod())。

还请注意,为了加快循环速度,您应该创建和重用*big.Int值,而不是在每次迭代中创建和丢弃它们。最简单的是创建和重用10

代码语言:javascript
复制
var ten = big.NewInt(10)

还为mod和div结果创建和重用值。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73163332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档