gpt4 book ai didi

戈朗 : odd big Int behavior

转载 作者:数据小太阳 更新时间:2023-10-29 03:30:16 26 4
gpt4 key购买 nike

所以我是 Go 的新手,对一般的编程还没有经验,所以我希望我不会因为提出愚蠢的问题而再次被否决。我正在解决项目欧拉问题,在问题 25“1000 位斐波那契数”中,我遇到了似乎很奇怪的行为。以下是我编写的导致此行为的代码。

package main

import (
"fmt"
"math/big"
)

func main() {
index := 2
l := new(big.Int)
pl := big.NewInt(1)
i := big.NewInt(1)
for {
l = i
i.Add(i, pl)
pl = l
index++
if len(i.String()) == 1000 {
break
}
}
fmt.Println(i, "\nindex: ", index)
}

当然这并没有生成正确的答案,所以在确定原因的过程中我发现我无意中发现了一种生成 2 的幂的巧妙方法。我进行了以下更改并且确实生成了正确的结果。

package main

import (
"fmt"
"math/big"
)

func main() {
index := 2
l := new(big.Int)
pl := big.NewInt(1)
i := big.NewInt(1)
for {
l.Set(i)
i.Add(i, pl)
pl.Set(l)
index++
if len(i.String()) == 1000 {
break
}
}
fmt.Println(i, "\nindex: ", index)
}

我的问题是第一个示例中发生了什么导致每个大 Int 变量都被设置为 i 的值,如果这不是分配大 Int var 值的正确方法,为什么这不会产生错误? i = l 等合法的 big Int 操作对于这种情况是完全不正确的吗?

最佳答案

线条

l = i

pl = l

没有按照您的想法行事。

lpli是指针,相互赋值复制的是指针值,不是big .Int 值。

执行 l = i 后,l 现在是与 i 相同的指针值,指向相同的 big.Int。当您使用 l.Set(i) 时,它将 lbig.Int 值设置为 i' s big.Int 值,但是 li 仍然指向两个独立的值。

关于戈朗 : odd big Int behavior,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44012681/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com