解题思路:解本题时,基本思路是,先求阶乘,再求阶乘的和。  自定义函数求阶乘。循环作和。

注意事项:1.采取自定函数求阶乘。用递归法。需注意递归法的尽头。(在本题中,fac函数的if语句作递归法的尽头,不可省略。)

              2.要注意最后结果的数值范围,避免溢出发生错误。

参考代码

#include<stdio.h>
long int fac(unsigned int n)  //定义为long int 型,避免溢出
{
    long int f;
    if(n==0) return 1;        //当n=0是,递归法到尽头,依次返回函数值。
    f=fac(n-1)*n;
    return (f);               //返回最后一次函数值,即单次阶乘的最后结果
}

int main()
{
    unsigned int n;
    long int s=0;
    int i;
    scanf("%d",&n);
    for(i=1;i<=n;i++)  s+=fac(i);    //以循环控制阶乘的和。fac函数每一次的返回值作为s的自加值
    printf("%ld",s);
    return 0;
}


点赞(16)
 

0.0分

45 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 137 条评论

3年前 回复TA
@Joker. 我的20有19位对的,而且输入5的时候也是153,为什么最后还是答案错误50
0130李铭康 3年前 回复TA
@Joker. @uq_14397604316 好像只要改成long int就可以了
牡蛎先生 3年前 回复TA
@Joker. @uq_31393949842 sn和item都改成long long int,printf那里改成lld试试?
冯梦杰 3年前 回复TA
@Joker. 改正:我又试了别人的成功的代码,我的代码前边几位正确了,但是后边结果出错了(只试了20),比别人的小好多。
冯梦杰 3年前 回复TA
@Joker. C语言:后边几位数字,如20,19,这些超过了int的范围(输出的时候也要打印lld),但是我自己运行了所有数字都成功了,提交就是结果错误,不知道为什么。
ALVIN 4年前 回复TA
@ALVIN long long int 也救不了它
TheMlikyWay 4年前 回复TA
@ALVIN long long int 才够
TheMlikyWay 4年前 回复TA
@Joker. 需要long long int Sn,item;
克肆光神 4年前 回复TA
@王玉涛 %ld
C语言菜狗子01 4年前 回复TA
@上单皇阿玛 淦我也是这样难受