我对函数有问题,我不明白为什么会发生这种情况。问题是:我有一个很大的数字,但是当我试图做一些除法运算时,我有零。守则是:
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
... }退出的例子是:
number is 6689502913449127057588118054090372586752746333138029810295671352301633557244962989366874165271984981308157637893214090552534408589408121859898481114389650005964960521256960000000000000000000000000000
key 0
first 0
0数字越来越多,Mod操作似乎也是正确的。Div操作不是。重点是什么?如何计算大数的基本除法?
发布于 2022-07-29 07:59:40
问题是这条线:
key := number.Mod(number, big.NewInt(10))你叫number.Mod(),它是Int.Mod(),修改了,接收器是number,它把它设置为模,也就是0,所以在这个number之后,number会被归零。
您必须使用新的big.Int,就像用于Div()操作一样:
key := new(big.Int).Mod(number, big.NewInt(10))在围棋游乐场上试一试。
还请注意,有Int.DivMod()同时执行这两个操作(Div()和Mod())。
还请注意,为了加快循环速度,您应该创建和重用*big.Int值,而不是在每次迭代中创建和丢弃它们。最简单的是创建和重用10
var ten = big.NewInt(10)还为mod和div结果创建和重用值。
https://stackoverflow.com/questions/73163332
复制相似问题