52 lines
1.8 KiB
Plaintext
52 lines
1.8 KiB
Plaintext
Imports System
|
|
Imports System.Numerics
|
|
Imports System.Linq
|
|
|
|
Module Module1
|
|
|
|
' Type Double:
|
|
|
|
Function DofactorialI(n As Integer) As Double ' Iterative
|
|
DofactorialI = 1 : For i As Integer = 1 To n : DofactorialI *= i : Next
|
|
End Function
|
|
|
|
' Type Unsigned Long:
|
|
|
|
Function ULfactorialI(n As Integer) As ULong ' Iterative
|
|
ULfactorialI = 1 : For i As Integer = 1 To n : ULfactorialI *= i : Next
|
|
End Function
|
|
|
|
' Type Decimal:
|
|
|
|
Function DefactorialI(n As Integer) As Decimal ' Iterative
|
|
DefactorialI = 1 : For i As Integer = 1 To n : DefactorialI *= i : Next
|
|
End Function
|
|
|
|
' Extends precision by "dehydrating" and "rehydrating" the powers of ten
|
|
Function DxfactorialI(n As Integer) As String ' Iterative
|
|
Dim factorial as Decimal = 1, zeros as integer = 0
|
|
For i As Integer = 1 To n : factorial *= i
|
|
If factorial Mod 10 = 0 Then factorial /= 10 : zeros += 1
|
|
Next : Return factorial.ToString() & New String("0", zeros)
|
|
End Function
|
|
|
|
' Arbitrary Precision:
|
|
|
|
Function FactorialI(n As Integer) As BigInteger ' Iterative
|
|
factorialI = 1 : For i As Integer = 1 To n : factorialI *= i : Next
|
|
End Function
|
|
|
|
Function Factorial(number As Integer) As BigInteger ' Functional
|
|
Return Enumerable.Range(1, number).Aggregate(New BigInteger(1),
|
|
Function(acc, num) acc * num)
|
|
End Function
|
|
|
|
Sub Main()
|
|
Console.WriteLine("Double : {0}! = {1:0}", 20, DoFactorialI(20))
|
|
Console.WriteLine("ULong : {0}! = {1:0}", 20, ULFactorialI(20))
|
|
Console.WriteLine("Decimal : {0}! = {1:0}", 27, DeFactorialI(27))
|
|
Console.WriteLine("Dec.Ext : {0}! = {1:0}", 32, DxFactorialI(32))
|
|
Console.WriteLine("Arb.Prec: {0}! = {1}", 250, Factorial(250))
|
|
End Sub
|
|
End Module
|