阶乘(Factorial)
通常求阶乘最容易想到递归去求,但是递归有其局限。当n>43左右时普通pc已经跑不动了,今天介绍一种方法快速求大数的阶乘。
查看更多关于阶乘 http://www.luschny.de/math/factorial/index.html
递归求阶乘:
public static long Factorial(int n){
return n>1?n*Factorial(n-1):1;
}
改进:
public static void Factorial(int n){
int []arr=new int[10000];
arr [0] = 1;
int valid = 1, carry = 0, multipleResult = 0;
for (int i = 2; i < n; i++) {
carry = 0;
for (int j = 0; j < valid; j++) {
multipleResult = arr [j] * i + carry;
arr [j] = multipleResult % 10;
carry = multipleResult / 10;
}
while (carry > 0) {
arr [valid++] = (carry % 10);
carry /= 10;
}
}
int []res = new int[valid];
Array.Copy (arr, res, valid);
for (int i = valid-1; i > -1; i--) {
Console.Write (res[i]);
}
Console.WriteLine ();
}