Problem 20

(require 'calc-ext)
(defvar calc-command-flags nil)

(defun factorial (n)
  (let ((rst 1))
    (while (math-lessp 0 n)
      (setq rst (math-mul rst n))
      (setq n (math-sub n 1)) )
    rst ))

(defun digit-sum (n)
  (let* ((str (math-format-value n))
	 (len (length str))
	 (sum 0))
    (dotimes (i len sum)
      (setq sum (+ sum (- (aref str i) ?0))) )))

(princ (digit-sum (factorial (string-to-number (car argv)))))
(princ "\n")