我正在尝试将(用于学习)下面的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)
}