$n!$ means $n\times(n-1)\times\cdots\times 3\times 2\times 1$. For example, $10!=10\times 9\times\cdots\times 2\times 1=3628800$ and the sum of the digits in the number $10!$ is 27. Find the sum of the digits in $100!$.

### Sage Solution

There is a single-line solution in Sage. I’ve added a bit more here just to determine the timing.

import time

start = time.time()

s = sum(factorial(100).digits())

elapsed = time.time() - start

print "Solution %s found after %s seconds" % (s,elapsed)

When executed, we find the following.

Solution 648 found after 0.000201940536499 seconds

### Python Solution

Without the built-in functions of Sage, we can build a factorial function and use some string functionality in Python to achieve the same result.

import time

def factorial(n):
if n == 0: return 1
else: return n * factorial(n - 1)

def sum_digits(n):
return sum([int(i) for i in str(n)])

start = time.time()

sumfac = sum_digits(factorial(100))

elapsed = time.time() - start

print("%s found in %s seconds") % (sumfac,elapsed)

When executed, the same result is returned.

648 found in 0.000312805175781 seconds

We could also compute the factorial using a reduced lambda function as in the following code.

#!/usr/bin/python

import time

def factorial(n):
return reduce(lambda x,y: x*y, range(1,n+1,1))

def sum_digits(n):
return sum([int(i) for i in str(n)])

start = time.time()

sumfac = sum_digits(factorial(100))

elapsed = time.time() - start

print("%s found in %s seconds") % (sumfac,elapsed)