I’m beginning to learn F# and the best way for me to go about that is to start applying it. There are some interesting computational problems over at Project Euler . This post is the continuation of a series of posts each involving a separate Project Euler problem. This post involves solutions to Project Euler problem #20.

n! means n × (n − 1) × … × 3 × 2 × 1

Find the sum of the digits in the number 100!

With F#’s BigInt support this was easy, straight-forward, and fast:

let swap (a, b) = (b, a) let rec digits x = let getNextDigit num = if num <= 0I then None else (num, 10I) |> BigInt.DivRem |> swap |> Some Seq.unfold getNextDigit x let answer = BigInt.Factorial >> digits >> Seq.sum |