您的位置:首页 > 其它

计算n的阶乘

2016-05-01 17:55 218 查看
C语言学习初期,相信你肯定编写过“计算n的阶乘”代码吧!怎么样,是不是觉得过于简单了呢?哈哈,就让我们再次回温这道题,详解它的编写过程(从最初的构思到具体的设计,体会一个脑海中的idea切切实实转化为代码的奇妙过程)

下面进入正题:

说明:本题我们暂时不探讨溢出问题,所以就拿“计算5的阶乘”举例

思路构想:计算5的阶乘,首先明白它的求法(即):5*4*3*2*1;可以发现每次乘的数都是依次递减,直到1,而且都是在之前的计算结果上不断乘数字;这里我们不难想到设置一个变量n,用于储存每一次的计算结果,同时,又由于每次相乘的数都是有规律的且相称次数较多,所以想到用for循环语句(不仅可以控制循环次数而且很方便地让每次乘的数值逐渐递增or递减),当然这里又得设置一个变量i,用于控制for循环。

好了,思路构想完毕,接下来就很容易转化为代码了

#include<stdlib.h>
int main()
{
int n=5;
int i;
for(i=n-1;i>0;i--)
{
n=n*i;
}

printf("%d",n);
system("pause");
return 0;
}


此段程序中for循环里我们用了乘数依次递减的方式,即5*4*3*2*1;当然你也可以用依次递增的方式,即1*2*3*4*5,下面我们也给出代码

#include<stdio.h>
#include<stdlib.h>
int main()
{
int n=1;
int i=1;
for(i=1;i<=5;i++)
{
n=n*i;
}

printf("%d",n);
system("pause");
return 0;
}


怎么样,是不是很清楚呢?别急,这里我们还没有讲完,其实下面的方式我觉得更为明了和规范(老师写的)

#include<stdio.h>
#include<stdlib.h>
int main()
{
int n=0;
scanf("%d",&n);
int ret=1;
int i=0;
for(i=n;i>0;i--)
{
ret=ret*i;
}

printf("%d",ret);
system("pause");
return 0;
}


相比于我写的以上两端代码,老师写的代码加入了scanf语句,方便检测数据;他设置了三个变量,当然本质还是一样的啦,比我多出来的那个变量用于自己控制输入数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: