如何优雅地用C语言实现阶乘运算——四种方法

 时间:2026-02-14 07:20:18

1、第一种:利用定义和for循环

试验:输入8,结果:8!=40320

程序代码如下:

//=======================

//原1.c

//利用定义实现阶乘

//-----------------------

#include<stdio.h>

main()

{

         int n,m=1,pro=1;//pro,即product,乘积

         printf("Input n:");

         scanf("%d",&n);

         for(;m<=n;++m)

                   pro=pro*m;

         printf("%d!=%d\n",n,pro);

}//===========================

如何优雅地用C语言实现阶乘运算——四种方法

2、第二种:调用函数

在C语言的模块设计中,可以利用定义和循环,设计一个专门计算阶乘的函数

fact(int),这样设计,以后如果遇到计算阶乘问题,可以直接套用函数,十分方便。

试验:输入 9,结果:9!=362880

程序代码如下:

//=======================

//原2.c

//调用函数实现阶乘

//-----------------------

#include<stdio.h>

main()

{

         int n;

         int fact(int);//实现阶乘的函数

         printf("Input n:");

         scanf("%d",&n);

         printf("%d!=%d\n",n,fact(n));

}

int fact(int n)

{

         int pro=1;

         int m=1;

         for(;m<=n;++m)

                   pro=pro*m;

         return(pro);

}//===========================

如何优雅地用C语言实现阶乘运算——四种方法

3、第三种,递归计算

在第二种调用函数的思想下,我们改进算法,利用递归运算,思路立马脱离了循环的桎梏

试验:输入10,结果:10!=3628800

程序代码如下:

//=======================

//原3.c

//利用递归实现阶乘

//-----------------------

#include<stdio.h>

main()

{

         int n;

         int fact(int);//实现阶乘的函数

         printf("Input n:");

         scanf("%d",&n);

         printf("%d!=%d\n",n,fact(n));

}

int fact(int n)

{

         int pro;//pro,即product,乘积,

         if(n<=1)

                   pro=1;

         else

                   pro=n*fact(n-1);

         return(pro);

}//===========================

如何优雅地用C语言实现阶乘运算——四种方法

4、第四种,利用静态变量实现阶乘

如果我们在C语言的学习更加深入一点,我们还会了解到静态变量(static)的特点,这时候利用静态变量实现阶乘也是别开生路。

试验:输入11,结果11!=39916800

程序代码如下:

//=======================

//原4.c

//利用静态变量实现阶乘

//-----------------------

#include<stdio.h>

main()

{

         int n,m=1,pro;

         long fact(int);//实现阶乘的函数

         printf("Input n:");

         scanf("%d",&n);

         for(;m<=n;m++)

                   pro=fact(m);

         printf("%d!=%ld\n",n,pro);

}

long fact(int n)

{

         static long pro=1;//pro,即product,乘积,

         pro=pro*n;

         return(pro);

}//===========================

如何优雅地用C语言实现阶乘运算——四种方法

5、总结:

由于阶乘是一个变化速度非常快的函数,对于较大数的阶乘的运算可能以上程序结果会溢出,这种情况下可以考虑把int型换成long型甚至是long long型;相应的,函数参数也要改动为 long fact(int),long long fact(int),long pro, long long pro,输出格式也要把第二个%d改为%ld。

但是,即便这样,仍不能解决大整数的阶乘问题,如1000!,在这种情况下我们还有更好的办法去处理,而这,将在后面的学习中学到。祝大家学习愉快。

  • 如何用C++写一个关于判断一个数是否为素数的程序!
  • 在思科模拟器上怎么配置交换机的端口
  • ArrayList如何求并集
  • Visual C++6.0怎么调试程序
  • 小数十进制怎么转二进制
  • 热门搜索
    南通旅游景点 驴妈妈旅游 敦煌旅游攻略 越南旅游景点 旅游风景图片 北戴河旅游攻略 烟台旅游攻略 贵州旅游自由行攻略 黑龙江旅游职业技术学院 广西旅游攻略