Go Lychrel的数字与大图书馆相匹配

Go Lychrel的数字与大图书馆相匹配,go,reverse,lychrel-numbers,Go,Reverse,Lychrel Numbers,我正试图在围棋中制作一个Lychrel数字程序,但我遇到了一些麻烦。使用“math/big”库,并使用一些额外的打印语句进行调试,我的代码如下所示: func reverse(n *big.Int) *big.Int { var ( m = n r = big.NewInt(0) z = big.NewInt(0) one = big.NewInt(1) ten = big.NewInt(10)

我正试图在围棋中制作一个Lychrel数字程序,但我遇到了一些麻烦。使用“math/big”库,并使用一些额外的打印语句进行调试,我的代码如下所示:

func reverse(n *big.Int) *big.Int {
    var (
        m = n
        r = big.NewInt(0)
        z = big.NewInt(0)
        one = big.NewInt(1)
        ten = big.NewInt(10)
        )
    for {
        r.Mul(r, ten)
        d := z
        d.Mod(m, ten)
        r.Add(r, d)
        m.Div(m, ten)
        if m.Cmp(one) == -1 {
            return r
        }
    }
}

func radd(num *big.Int) *big.Int {
    newNum := num
    rnum := reverse(num)
    newNum = newNum.Add(num, rnum)
    fmt.Println(num, "+", rnum, "=", newNum)

    return newNum
}

func lychrel(arg int) bool {
    fmt.Println("Now testing", arg)
    num := big.NewInt(int64(arg))
    for i := 0; i < 50; i++ {
        num = radd(num)
        fmt.Println(i, ":", num)
        if num.Cmp(reverse(num)) == 0 {
            return false
        }
    }
    return true
}
我不知道哪里出了问题。我希望我没有错过什么愚蠢的事情,因为我花了一个上午的时间试图让它发挥作用

NewInt分配并返回一个新的Int集到x

将z设置为x并返回z

您正在分配指针,而不是值

m = n
newNum := num
赋值

m = new(big.Int).Set(n)
newNum := new(big.Int).Set(num)
比如说,

package main

import (
    "fmt"
    "math/big"
)

func reverse(n *big.Int) *big.Int {
    var (
        m   = new(big.Int).Set(n)
        r   = big.NewInt(0)
        z   = big.NewInt(0)
        one = big.NewInt(1)
        ten = big.NewInt(10)
    )
    for {
        r.Mul(r, ten)
        d := z
        d.Mod(m, ten)
        r.Add(r, d)
        m.Div(m, ten)
        if m.Cmp(one) == -1 {
            return r
        }
    }
}

func radd(num *big.Int) *big.Int {
    newNum := new(big.Int).Set(num)
    rnum := reverse(num)
    newNum = newNum.Add(num, rnum)
    fmt.Println(num, "+", rnum, "=", newNum)
    return newNum
}

func lychrel(arg int) bool {
    fmt.Println("Now testing", arg)
    num := big.NewInt(int64(arg))
    for i := 0; i < 50; i++ {
        num = radd(num)
        fmt.Println(i, ":", num)
        if num.Cmp(reverse(num)) == 0 {
            return false
        }
    }
    return true
}

func main() {
    lychrel(196)
}
func (z *Int) Set(x *Int) *Int
m = n
newNum := num
m = new(big.Int).Set(n)
newNum := new(big.Int).Set(num)
package main

import (
    "fmt"
    "math/big"
)

func reverse(n *big.Int) *big.Int {
    var (
        m   = new(big.Int).Set(n)
        r   = big.NewInt(0)
        z   = big.NewInt(0)
        one = big.NewInt(1)
        ten = big.NewInt(10)
    )
    for {
        r.Mul(r, ten)
        d := z
        d.Mod(m, ten)
        r.Add(r, d)
        m.Div(m, ten)
        if m.Cmp(one) == -1 {
            return r
        }
    }
}

func radd(num *big.Int) *big.Int {
    newNum := new(big.Int).Set(num)
    rnum := reverse(num)
    newNum = newNum.Add(num, rnum)
    fmt.Println(num, "+", rnum, "=", newNum)
    return newNum
}

func lychrel(arg int) bool {
    fmt.Println("Now testing", arg)
    num := big.NewInt(int64(arg))
    for i := 0; i < 50; i++ {
        num = radd(num)
        fmt.Println(i, ":", num)
        if num.Cmp(reverse(num)) == 0 {
            return false
        }
    }
    return true
}

func main() {
    lychrel(196)
}
Now testing 196
196 + 691 = 887
0 : 887
. . .