计算n的阶乘
2016-05-01 17:55
218 查看
C语言学习初期,相信你肯定编写过“计算n的阶乘”代码吧!怎么样,是不是觉得过于简单了呢?哈哈,就让我们再次回温这道题,详解它的编写过程(从最初的构思到具体的设计,体会一个脑海中的idea切切实实转化为代码的奇妙过程)
下面进入正题:
说明:本题我们暂时不探讨溢出问题,所以就拿“计算5的阶乘”举例
思路构想:计算5的阶乘,首先明白它的求法(即):5*4*3*2*1;可以发现每次乘的数都是依次递减,直到1,而且都是在之前的计算结果上不断乘数字;这里我们不难想到设置一个变量n,用于储存每一次的计算结果,同时,又由于每次相乘的数都是有规律的且相称次数较多,所以想到用for循环语句(不仅可以控制循环次数而且很方便地让每次乘的数值逐渐递增or递减),当然这里又得设置一个变量i,用于控制for循环。
好了,思路构想完毕,接下来就很容易转化为代码了
此段程序中for循环里我们用了乘数依次递减的方式,即5*4*3*2*1;当然你也可以用依次递增的方式,即1*2*3*4*5,下面我们也给出代码
怎么样,是不是很清楚呢?别急,这里我们还没有讲完,其实下面的方式我觉得更为明了和规范(老师写的)
相比于我写的以上两端代码,老师写的代码加入了scanf语句,方便检测数据;他设置了三个变量,当然本质还是一样的啦,比我多出来的那个变量用于自己控制输入数据。
下面进入正题:
说明:本题我们暂时不探讨溢出问题,所以就拿“计算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语句,方便检测数据;他设置了三个变量,当然本质还是一样的啦,比我多出来的那个变量用于自己控制输入数据。
相关文章推荐
- Swift基础01
- MongoDB基础
- 延云YDB&&YA100安装部署文档
- 延云YDB&&YA100安装部署文档
- 延云YDB&&YA100安装部署文档
- 延云YDB&&YA100安装部署文档
- 延云YDB&&YA100安装部署文档
- 延云YDB&&YA100安装部署文档
- 延云YDB&&YA100安装部署文档
- 延云YDB&&YA100安装部署文档
- 延云YDB&&YA100安装部署文档
- 延云YDB&&YA100安装部署文档
- 延云YDB&&YA100安装部署文档
- 延云YDB&&YA100安装部署文档
- 延云YDB&&YA100安装部署文档
- 延云YDB&&YA100安装部署文档
- 延云YDB&&YA100安装部署文档
- 延云YDB&&YA100安装部署文档
- 延云YDB&&YA100安装部署文档
- JSON入门总结