获得bigInt数字golang的总和

时间:2017-09-24 23:32:52

标签: go bigint sum-of-digits

  

您好我是golang编程语言的新手。我可以得到bigint   来自factoral函数的值,但它不适用于add   功能

     

我有add函数接受bigint但是当我尝试添加一个   .Mod和.Div方法因某种原因返回0。如果否则   add函数中的语句是我在使用时使用的旧语句   有来自事实函数的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)))

}

1 个答案:

答案 0 :(得分: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