パスカルの三角形については説明の必要はないと思いますので、BigIntでのソースコードと簡単な説明とします。
パスカルの三角形をInt型で計算するとおそらく10段程度が限界と思われます(オーバーフロー)。したがってBigInt型で計算するのには非常に適した題材です。
このソースコードでは、内部計算は全ての段を計算していますが(全てを計算しないと次の段を決定できない)、表示は最終段のみとなっています。段の全てを表示したい場合はコメント化してある行を解放すれば良いです。
10段まで
//
// main.swift
// BigInt_for_C_swift
//PascalTriangle
//
let MAX = 10//10段まで計算する
var pas: [[BigInt]] = []//M段N行の値を格納するはいれつ
//ここからは段ごとにすべてのようそを表示する
for i in 0..<MAX {//0段からMAX段までを計算する
print("\(i)", terminator: " ")//N弾目 スペース という表示
pas.append(Array(repeating: BigInt(0), count: i + 1)) // その行に必要な長さだけ配列を確保
pas[i][0] = BigInt(1)//両端は1
if i >= 2 {
for j in 1..<i {
pas[i][j] = pas[i - 1][j - 1] + pas[i - 1][j]//上の段の両脇を足して今の段に代入
}
}
pas[i][i] = BigInt(1)//両端は1
print("i = \(i): \(pas[i])")//i段目の
}
// 最下段(MAX)を表示
for j in 0..<MAX {
print("\(pas[MAX-1][j])")
}
0 i = 0: [1]
1 i = 1: [1, 1]
2 i = 2: [1, 2, 1]
3 i = 3: [1, 3, 3, 1]
4 i = 4: [1, 4, 6, 4, 1]
5 i = 5: [1, 5, 10, 10, 5, 1]
6 i = 6: [1, 6, 15, 20, 15, 6, 1]
7 i = 7: [1, 7, 21, 35, 35, 21, 7, 1]
8 i = 8: [1, 8, 28, 56, 70, 56, 28, 8, 1]
9 i = 9: [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
1
9
36
84
126
126
84
36
9
1
100段まで(確実にオーバーフローする)
MAXを100に変更する。2つのprint文をコメント化する。
これで最終段のみ表示される。
1
9
36
84
126
126
84
36
9
1
