【问题标题】:Writing Pascal's Triangle using big.Int int使用 big.Int int 编写帕斯卡三角形
【发布时间】:2018-09-18 05:38:13
【问题描述】:

我有一些使用big.Int 的帕斯卡三角代码。如何添加值?我收到一个错误:

invalid operation: 
PascalTriangle[r - 1][c - 1] + PascalTriangle[r - 1][c] 
(operator + not defined on struct)

我正在使用big.Int 数组,所以我不能使用big 包中的Add

func generatePascalTriangle(n int) [][]big.Int {
    PascalTriangle := make([][]big.Int, n)
    for i := range PascalTriangle {
        PascalTriangle[i] = make([]big.Int, n)
    }
    var one big.Int
    one.SetInt64(1)
    for r := 0; r < n; r++ {
        PascalTriangle[r][0] = one
        PascalTriangle[r][r] = one
    }
    for r := 2; r < n; r++ {
        for c := 1; c < r; c++ {
            PascalTriangle[r][c] = PascalTriangle[r-1][c-1] + PascalTriangle[r-1][c]
        }
    }
    return PascalTriangle
}

【问题讨论】:

    标签: go pascals-triangle


    【解决方案1】:

    我使用的是 big.Int 数组,所以不能使用“big”包中的“Add”。


    这种说法是错误的。你可以,而且你应该这样做。

    例如,

    package main
    
    import (
        "fmt"
        "math/big"
    )
    
    func generatePascalTriangle(n int) [][]big.Int {
        PascalTriangle := make([][]big.Int, n)
        for i := range PascalTriangle {
            PascalTriangle[i] = make([]big.Int, n)
        }
        var one big.Int
        one.SetInt64(1)
        for r := 0; r < n; r++ {
            PascalTriangle[r][0] = one
            PascalTriangle[r][r] = one
        }
        for r := 2; r < n; r++ {
            for c := 1; c < r; c++ {
                // PascalTriangle[r][c] = PascalTriangle[r-1][c-1] + PascalTriangle[r-1][c]
                PascalTriangle[r][c] = *PascalTriangle[r][c].Add(&PascalTriangle[r-1][c-1], &PascalTriangle[r-1][c])
            }
        }
        return PascalTriangle
    }
    
    func main() {
        t := generatePascalTriangle(7)
        for i, r := range t {
            for _, n := range r[:i+1] {
                fmt.Print(n.String() + " ")
            }
            fmt.Println()
        }
    }
    

    游乐场:https://play.golang.org/p/KUGsjr8Mon5

    输出:

    1 
    1 1 
    1 2 1 
    1 3 3 1 
    1 4 6 4 1 
    1 5 10 10 5 1 
    1 6 15 20 15 6 1 
    

    【讨论】:

    • PascalTriangle[r][c] = *PascalTriangle[r][c].Add(&PascalTriangle[r-1][c-1], &PascalTriangle[r-1][c]) 基本上您正在分配指针“*PascalTriangle[r][c]”并使用特定单元格的地址来添加这些单元格中的值。我不知道这是如何工作的
    • p := 101 p = *p 这怎么可能
    猜你喜欢
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-12
    • 2015-01-29
    • 2011-05-07
    相关资源
    最近更新 更多