过多的我就不说了,直接看看代码:
java版的:
/**
*
*/
package Factorial;
/**
* @author 牟尼(昵称)
* @blog:http://blog.csdn.net/u012027907
*
*/
public class Factorial {
/*
* 大数阶乘计算类
*/
/*
* 分析:大数阶乘用数组来存储,如5的阶乘可存在数组cal[]中,表示为
* 0 1 2 3
*[3][0][2][7]
*个位存阶乘的位数
*要求5的阶乘,则要求得4!的结果,一直要求的1!的结果为1;
*所以使用循环即可
*/
/*
* 大数阶乘计算
*/
public String fac(int num){
String result; //最终结果的字符串
int max; //阶乘的位数
double sum = 0;
for(int i = 2; i <=num; i++){//计算阶乘的位数
sum += Math.log10(i);
}
max = (int)sum +1;
int cal[] = new int[max+1];//开辟空间
for(int j = 1; j <= max; j++)
cal[j] = 0;
cal[0] = max; //cal[0]存储阶乘的位数
cal[1] = 1;
int g = 0;//进位
for(int k = 2; k <= num; k++){//从2乘到num
g = 0;
for(int i =1; i <=max;i++){//计算每个k与数组相乘的结果
cal[i] = cal[i]*k + g;
g = cal[i]/10;
cal[i] = cal[i]%10;
}
}
result = "";
for(int i = max; i > 0; i--)//将整型数组转为字符串
result += cal[i];
return result;
}
}
运行结果: