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)


 
function left-factorial ([BigInt]$n) {
    [BigInt]$k, [BigInt]$fact = ([BigInt]::Zero), ([BigInt]::One)
    [BigInt]$lfact = ([BigInt]::Zero)
    while($k -lt $n){        
        if($k -gt ([BigInt]::Zero)) {
            $fact = [BigInt]::Multiply($fact, $k)
            $lfact = [BigInt]::Add($lfact, $fact)
        } else {
            $lfact = ([BigInt]::One)
        }
        $k = [BigInt]::Add($k, [BigInt]::One)
    }
    $lfact
}
0..9 | foreach{
    "!$_ = $(left-factorial $_)"
}
for($i = 10; $i -le 110; $i += 10) {
    "!$i = $(left-factorial $i)"
}
for($i = 1000; $i -le 10000; $i += 1000) {
    $digits = [BigInt]::Log10($(left-factorial $i)) 
    $digits = [Math]::Floor($digits) + 1
    if($digits -gt 1) {"!$i has $digits digits"}
    else {"!$i has $digits digit"}
}
 