(Java)求n的阶乘
- 当n较小时,求n!
- 当n较大时,求n!
一、当n较小时,求n!
当n整数值较小时,无须考虑n!是否会超出数据类型的范围
1、递归求n!
public static long getNFactorial(int n){
if(n==0){
return 1l;
}
return n*getNFactorial1(n-1);
}
2、非递归求n!
public static long getNFactorial1(int n){
if(n==0){
return 1l;
}
long sum=1l;
for(int i=1;i<=n;i++){
sum=sum*i;
}
return sum;
}
二、当n较小时,求n!
当n整数值较大时,n!会超出数据类型的范围,使用数组模拟大数的乘法
思路:主要在进位的考虑
1*2*3*4*5=120 在数组中为021
数组中 021 *6= 0 2 7
public static void getNFactorial(int n) {
int num[] = new int[1000];
int i, j;
if (n == 1 || n == 0) {
System.out.println(1);
} else {
int p, h;// p 存放当前结果的位数,h为进位;
p = 1;
h = 0;
num[1] = 1;
for (i = 2; i <= n; i++) {
// 使得a[]的每位与i相乘
for (j = 1; j <= p; j++) {
num[j] = num[j] * i + h;
h = num[j] / 10;
num[j] = num[j] % 10;
}
// 表示向新的位置进位
while (h > 0) {
num[j] = h % 10;
h = h / 10;
j++;
}
p = j - 1;
}
for (i = p; i >= 1; i--) {
System.out.print(num[i]);
}
}
}
版权声明:本文为wangchuanqi1234原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。