Golang中big.Int大数除法结果异常为0问题求助
问题:Golang big.Int大数除法返回0异常
在使用Golang的big.Int进行大数除法时,出现取模运算正常,但除法结果始终为0的问题。相关代码及运行输出如下:
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 first variable too ... }
运行输出示例:
number is 6689502913449127057588118054090372586752746333138029810295671352301633557244962989366874165271984981308157637893214090552534408589408121859898481114389650005964960521256960000000000000000000000000000 key 0 first 0 0
问题原因
big.Int的所有方法(包括Mod)都会直接修改调用该方法的变量本身,而非仅返回结果。你执行number.Mod(number, big.NewInt(10))时,已经把原number的值替换成了取模后的结果(也就是0),之后再用这个被修改后的number做除法,自然得到0。
正确执行大数除法的方法
不要直接用原number调用Mod方法,而是新建一个临时big.Int变量存储取模结果,保留原number的值用于后续除法运算:
for { fmt.Println("number is", number) // 用临时变量存取模结果,不修改原number key := new(big.Int).Mod(number, big.NewInt(10)) fmt.Println("key", key) // 此时number还是原始值,除法正常执行 first := new(big.Int).Div(number, big.NewInt(10)) fmt.Println("first ", first) number = first fmt.Println(number) ... }
这样修改后,取模操作不会破坏原number的值,除法就能得到正确结果。
内容的提问来源于stack exchange,提问作者ar rr
相关产品推荐
相关产品推荐

