2017-09-24 67 views
0

嗨,我是新的golang編程語言。我可以從事實函數中獲取bigint 值,但它不能與添加 函數一起使用。得到bigInt數字golang的總和

我有加入函數接受bigint,但是當我嘗試添加一個 .Mod和.Div方法時,它返回0因爲某種原因。 add函數中的if else 語句是我使用的舊語句,當我的 具有來自事實函數的int值時。

當它作爲int值時它工作得很完美。當我試圖 更改if else語句來接受bigint值時,我無法讓它 工作。

我已經嘗試過.Mod和.Div方法,它們正在打印出 正確的值。但是當我嘗試將它們加在一起時,即使值爲「22」,「2」,它總是會返回 0。我現在已經把if語句放回原始的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))) 

} 
+0

'sum'是不確定的。你忘了遺漏全球定義嗎?另外,'number'(add()'的參數)是一個'* big.Int',所以'add'函數中的操作符沒有任何意義(即''''''''' ,'+'等等,它們沒有爲'* big.Int'和'int'類型定義)。 – PaSTE

回答

0

固定它

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))) 

} 

看來你的問題很可能隨路大詮釋對象,其方法調用將是一個價值被分配到,而不一定的一個參數。

見:這裏https://golang.org/pkg/math/big/#Int.Div

+0

非常感謝你我非常感謝你的幫助。 – user2963022