原题链接:[编程入门]阶乘求和
求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数字(n不超过20)。
解题思路:
代码本身很简单,只需要用到for循环,不管是阶乘还是阶乘的累加,都可以计算。
注意事项:
需要注意的是整形的存储范围
int | -2147483648~+2147483647 |
long long int | -9223372036854775808~+9223372036854775807 |
在本题中采取int,我们很容易就会溢出范围,因此在这里我们使用long long int。
参考代码:
代码一:为阶乘计算单独一个for循环,并将其嵌套到累加计算的for循环内。(也可以把计算阶乘的for单独拿出去,做一个函数体,不过在本题中显然反而提升了复杂度。不建议采用)
#include <stdio.h> int main() { int n,i,j; long long int a=1,sn=0; //避免溢出 scanf("%d",&n); for(j=n;j>0;j--){ for(i=j;i>0;i--){ //此处用的是由大到小的算法,for(i=1;i<=j;i++),结果不会有变化。 a=a*i; } //这个for循环是用于计算阶乘的 sn+=a; //这里用于累加 a=1; //给a重新赋1() } printf("%lld",sn); return 0; } /* 计算流程:以n=5为例 a5=1*5*4*3*2*1 //a5表示a的值在本次for循环中为5! 其余a4,a3,a2,a1同理 sn=0+a5 a4=1*4*3*2*1 sn=a5+a4 ...... 以此类推,以下省略 */
代码二:直接计算累加结果
#include <stdio.h> int main() { int n,i,j; long long int a=1,sn=0; //避免溢出 scanf("%d",&n); for(j=1;j<=n;j++){ //此处只能采用由小到大的算法 a=j*a; sn+=a; } printf("%lld",sn); return 0; } /* 计算流程:以n=5为例 1*1+2*1+3*2+4*6+5*24 //即1!+2!+3!+4!+5! */
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复