Left factorials,   !n,   may refer to either   subfactorials   or to   factorial sums;

the same notation can be confusingly seen being used for the two different definitions.

Sometimes,   subfactorials   (also known as derangements)   may use any of the notations:

     !n`   
     !n  
     n¡  


(It may not be visually obvious, but the last example uses an upside-down exclamation mark.)



This Rosetta Code task will be using this formula   (factorial sums)   for   left factorial:


   



!
n
=

∑

k
=
0


n
−
1


k
!


{\displaystyle !n=\sum _{k=0}^{n-1}k!}




 where


   



!
0
=
0


{\displaystyle !0=0}






Task
Display the left factorials for:

   zero through ten     (inclusive)
   20   through   110   (inclusive)   by tens


Display the length (in decimal digits) of the left factorials for:

   1,000   through   10,000   (inclusive), by thousands.


Also see

   The OEIS entry: A003422 left factorials
   The MathWorld entry: left factorial
   The MathWorld entry: factorial sums
   The MathWorld entry: subfactorial


Related task

   permutations/derangements (subfactorials)


// version 1.0.6
 
import java.math.BigInteger
 
fun leftFactorial(n: Int): BigInteger {
    if (n == 0) return BigInteger.ZERO
    var fact = BigInteger.ONE
    var sum = fact
    for (i in 1 until n) {
        fact *= BigInteger.valueOf(i.toLong())
        sum += fact
    }        
    return sum
}
 
fun main(args: Array<String>) {
    for (i in 0..110) 
        if (i <= 10 || (i % 10) == 0) 
            println("!${i.toString().padEnd(3)} = ${leftFactorial(i)}")
    println("\nLength of the following left factorials:")
    for (i in 1000..10000 step 1000) 
        println("!${i.toString().padEnd(5)} has ${leftFactorial(i).toString().length} digits")
}