Project Euler – Problem 20 Solution

Presently sponsored by Serverless Guru: Your guide to cloud excellence, helping you every step of your serverless journey, including team training, pattern development, mass service migrations, architecting, and developing new solutions. Speak to a Guru today.

Problem

n! means n x (n – 1) x … x 3 x 2 x 1

Find the sum of the digits in the number 100!

Solution

let rec factorial (n:bigint) = if n = 1I then 1I else n * factorial(n-1I)

let number = factorial 100I
let digits = number.ToString().ToCharArray() |> Seq.map (fun c -> int32(c.ToString()))
let sum = digits |> Seq.sum

This solution is pretty straight forward, though you might be curious as to what the rec keyword in the factorial function is for. In F# you need to explicitly specify that a function can be recursive and you do so with the rec keyword.

Note that the last three lines can be merged into one:

let answer = (factorial 100I).ToString().ToCharArray() |> Seq.sumBy (fun c -> int32(c.ToString()))

The Seq.sumBy function is basically Seq.map and Seq.sum functions rolled into one.

2 thoughts on “Project Euler – Problem 20 Solution”

  1. Pingback: 10 one-line solutions for project euler | united-coders.com

  2. Pingback: united-coders - 10 one-line solutions for project euler

Leave a Comment

Your email address will not be published. Required fields are marked *