In mathematics, the factorial of integer n
is written as n!
. It is equal to the product of n
and every integer preceding it.
For example: 5! = 1 x 2 x 3 x 4 x 5 = 120
Your mission is simple: write a function that takes an integer n
and returns the value of n!
.
You are guaranteed an integer argument. For any values outside the non-negative range, return null
, nil
or None
(return an empty string ""
in C and C++). For non-negative numbers a full length number is expected for example, return 25! = "15511210043330985984000000"
as a string.
For more on factorials, see http://en.wikipedia.org/wiki/Factorial
NOTES:
- The use of BigInteger or BigNumber functions has been disabled, this requires a complex solution.
- I have removed the use of require in the javascript language.
using System.Collections.Generic;
using System.Linq;
public class Kata
{
public static string? Factorial(int n)
{
if (n < 0)
return null;
List<int> factorial = new() { 1 };
for (int i = 1; i <= n; i++)
MultiplyLargeNumber(factorial, i);
return string.Concat(factorial.Select(x => x).Reverse());
}
public static void MultiplyLargeNumber(List<int> largeNumber, int number)
{
int remainder = 0;
for (int i = 0; i < largeNumber.Count; i++)
{
remainder += largeNumber[i] * number;
largeNumber[i] = remainder % 10;
remainder /= 10;
}
while (remainder != 0)
{
largeNumber.Add(remainder % 10);
remainder /= 10;
}
}
}