C语言计算阶乘的几种方法

方法一
采用while循环

#include <stdio.h>
//阶乘 
int main(void){
	int n;
	scanf("%d",&n);
 
	int fact=1;
	int i=1;
	while(i<=n){
		fact*=i;
		i++;
	} 
	printf("%d!=%d\n",n,fact);
	return 0;
}

方法二
采用for循环

#include <stdio.h>
//阶乘 
int main(void){
	int n;
	scanf("%d",&n);
	int fact=1;
 
	int i=1;
	for(i=2;i<=n;i++) {
		fact*=i;
	}
	printf("%d!=%d\n",n,fact);
	return 0;
}

或者:

#include <stdio.h>
int main(void){
	int n;
	scanf("%d",&n);
	int fact=1;
 
	int i=n;	
	for(;n>1;n--){
		fact *=n;
	}
	printf("%d!=%d\n",i,fact);
	return 0;
}

方法三
采用递归计算阶乘

#include <stdio.h>
int main(void) {
	int n;
	long factorial_recursion(int m);
	scanf("%d",&n);
 
	long recursion_result = factorial_recursion(n);	
	printf("The factorial(recursion) of %ld is %ld!\n", n, recursion_result);
	return 0;
}
// 递归计算阶乘
long factorial_recursion(int m) {
	if(m<=0) {
		return 1;
	} else {
		return m * factorial_recursion(m-1);
	}
}

方法四
采用迭代计算阶乘

#include <stdio.h>
int main(void){
	int n;
	long factorial_iteration(int m);
	scanf("%d",&n);
 
	long iteration_result = factorial_iteration(n);	
	printf("The factorial(recursion) of %ld is %ld!\n", n, iteration_result);
	return 0;
}
// 迭代计算阶乘
long factorial_iteration(int m){
    int result = 1;
    while(m>1){
        result *= m;
        m--;
    }
    return result;
}

C求大数的阶乘

#include <stdio.h>
#include <string.h>
int main() {
	int i,j,n;
	int d=1;//d是位数
	int temp;//temp为阶乘元素与临时结果的乘积
	int carry;//carry是进位
	int a[3000];//确保数组足够大
	scanf("%d",&n);//n的阶乘
	a[0]=1;//先初始化为1,方便后面运算
	for(i=2; i<=n; i++) { //从2开始阶乘 ,每次循环计算i阶乘的结果
		for(j=1,carry=0; j<=d; j++) { // 每次循环初始化进位的值
			temp=a[j-1]*i+carry;//相应阶乘中的一项与当前所得临时结果的某位相乘加上进位
			a[j-1]=temp%10;//更新临时结果的位上信息
			carry=temp/10;//如果有进位就进入下面的循环
		}
		while(carry) {   //如果有进位
			++d;        //增加进位,位数加一
			a[d-1]=carry%10;   //给新的进位赋值
			carry=carry/10;    //看还可不可以再进位
		}
	}
	printf("n!=");
	for(j=d-1; j>=0; j--)     //从高位向低位依次输出
		printf("%d",a[j]);
	printf("\n");
	return 0;
}

递归和迭代都是循环的一种。
简单地说,递归是重复调用函数自身实现循环。迭代是函数内某段代码实现循环,而迭代与普通循环的区别是:循环代码中参与运算的变量同时是保存结果的变量,当前保存的结果作为下一次循环计算的初始值。
递归循环中,遇到满足终止条件的情况时逐层返回来结束。迭代则使用计数器结束循环。当然很多情况都是多种循环混合采用,这要根据具体需求。


发布日期:

所属分类: 易语言 标签: