2015-05-24 56 views
1

我試圖打印一個因子塔爾:如何在F#中的打印表中添加填充?

輸入:一個int n。

輸出:從1的階乘結果表!到n !.

這裏是我做過什麼:

let toBigInt (n: int) = bigint(n) // Convert an "int" to a "bigint". 

// Factorial with bigint support: 
let fac n = 
    [1..n] 
    |> List.map toBigInt 
    |> List.reduce (*) 

let printFacTable n = 
    let listNum = [1 .. n] 
    let listFac = listNum |> List.map fac 
    let numFacPair = List.zip listNum listFac 
    for (k, v) in numFacPair 
     do printfn "%d ! = %A" k v 

結果:

> printFacTable 12;; 
1 ! = 1 
2 ! = 2 
3 ! = 6 
4 ! = 24 
5 ! = 120 
6 ! = 720 
7 ! = 5040 
8 ! = 40320 
9 ! = 362880 
10 ! = 3628800 
11 ! = 39916800 
12 ! = 479001600 
val it : unit =() 

結果是好的。我想通過!前面的調整墊來垂直對齊! =。假設這個程序接受最多8位數字作爲輸入。我想填充應該是:

let padding = 8 - eachNum.length 

但我不知道如何把它放入程序塊。任何想法?

+0

爲什麼我得到downvoted?那是因爲我的問題太簡單了?作爲初學者,我已經努力解決這個問題。 – Nick

+1

我沒有倒下,但我猜想這是因爲通過閱讀文檔可以回答這個問題,這應該是第一步。問題很好地形成,但它沒有任何內在錯誤。 : - ] – ildjarn

回答

1

試試這個:

do printfn "%8d ! = %A" k v 
+0

它的工作原理。謝謝! – Nick

1

我覺得這是更好地在左邊格式:

for (k, v) in numFacPair 
    do printfn "%-2d ! = %A" k v 

然後printFacTable 12:

1 ! = 1 
2 ! = 2 
3 ! = 6 
4 ! = 24 
5 ! = 120 
6 ! = 720 
7 ! = 5040 
8 ! = 40320 
9 ! = 362880 
10 ! = 3628800 
11 ! = 39916800 
12 ! = 479001600 

鏈接:http://ideone.com/gJeK0B

+0

當輸入數字增加到3位時,我們需要將縮進量增加到'%-3d',所以我想最好把它設置爲'%-8d'。瞭解'ideone.com'也很好。謝謝! – Nick

相關問題