3

嗨,我是 golang 编程语言的新手。我可以从阶乘函数中获得 bigint 值,但它不适用于 add 函数。

我有接受 bigint 的 add 函数,但是当我尝试添加 .Mod 和 .Div 方法时,它出于某种原因返回 0。add 函数中的 if else 语句是我在使用来自阶乘函数的 int 值时使用的旧语句。

当它是 int 值时,它工作得很好。当我试图改变 if else 语句以接受 bigint 值时,我根本无法让它工作。

我尝试了 .Mod 和 .Div 方法,它们打印出正确的值。但是当我尝试将它们加在一起时,它总是返回 0。即使值是“22”、“2”。我现在把 if else 语句放回原来的 int 值。

如果有人可以帮助我解决这个问题,我将非常感激。

 package main

import (
    "fmt"
    "math/big"
)

func factoral(n uint64) (r *big.Int) {

    one, bn := big.NewInt(1), new(big.Int).SetUint64(n)

    r = big.NewInt(1)
    if bn.Cmp(one) <= 0 {
        return
    }
    for i := big.NewInt(2); i.Cmp(bn) <= 0; i.Add(i, one) {
        r.Mul(r, i)
    }
    return
}

func add(number *big.Int) *big.Int {
    //this the statement that works with normal int values
    if number/10 < 10 {
        return sum + number/10
    } else {
        return sum + add(number/10)
    }

}
func main() {
    fmt.Println(add(factoral(100)))

}
4

1 回答 1

1

解决它

package main

import (
    "fmt"
    "math/big"
)

func factoral(n uint64) (r *big.Int) {

    one, bn := big.NewInt(1), new(big.Int).SetUint64(n)

    r = big.NewInt(1)
    if bn.Cmp(one) <= 0 {
        return
    }
    for i := big.NewInt(2); i.Cmp(bn) <= 0; i.Add(i, one) {
        r.Mul(r, i)
    }
    return
}

func add(number *big.Int) *big.Int {
    ten := big.NewInt(10)
    sum := big.NewInt(0)
    mod := big.NewInt(0)
    for ten.Cmp(number)<0 {
      sum.Add(sum, mod.Mod(number,ten))
      number.Div(number,ten)
    }
    sum.Add(sum,number)
  return sum
}
func main() {
    fmt.Println(add(factoral(100)))

}

似乎您的问题可能与您调用其方法的 Big Int 对象将成为分配值的对象的方式有关,而不一定是参数之一。

见:https ://golang.org/pkg/math/big/#Int.Div

于 2017-09-24T23:58:10.473 回答