登录
首页 >  Golang >  Go问答

计算 Go 中大数的幂和根

来源:stackoverflow

时间:2024-03-24 22:27:42 247浏览 收藏

本文探讨了在 Go 语言中计算大数幂和根的问题。文章描述了一个使用浮点运算的 Go 代码,该代码无法满足条件,因此无法显示解决方案。作者认为精度问题可能是导致问题的原因,并提出了一个使用整数操作的改进解决方案。

问题内容

我正在尝试将下面的 python 代码移植(用于学习)到 go - python 工作正常。

for n in range (81522017,81522025):
     b = int(str(n) + str(n+1)+str(n+2))
     if b**(1/3) % 1 == 0:
         print(n,b)
         break

//solution 81522019   and  815220198152202081522021

所以在 go 中,我最终得到:

package main

import (
    "fmt"
    "strconv"
    "math"
)

func main() {
  
    for n:=81522017; n<81522025;n++{
      b:=(strconv.Itoa(n)+strconv.Itoa(n+1)+strconv.Itoa(n+2))
      bFloat, _ := (strconv.ParseFloat(b,64))
    
      if math.Mod((math.Pow((bFloat),(1.0/3.0))),1.0)   == 0 {
          fmt.Println(n,bFloat)  
      }    
    }
}

if 语句中的条件从未满足,因此不显示解决方案。我认为这与处理浮动的精度有关。

最终,我正在考虑取一个大整数(在本例中为 815220198152202081522021)的立方根,并检查它是否是纯整数 - 因此是 python 代码中的 %1。

我错过了什么——必须有一种更简单的方法来做到这一点......

非常收到任何帮助/指示。


正确答案


我认为这是因为你使用了 float % 整数,比如说 69.777 % 1.0,它必须是 0.777,而不是 0,所以它不在 if 条件下。你试试这个解决方案。这是添加int()哈哈。

if int(math.Mod((math.Pow((bFloat),(1.0/3.0))),1.0)) == 0 {
    fmt.Println(n,bFloat)  
}

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>