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

注意事项: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 条评论

KobeandJay 4年前 回复TA
@小太阳 哥们思路不错
114514 4年前 回复TA
#include<stdio.h>
int f(int k);
int main()
{
    int a,i;
    int sum=0;
    scanf("%d",&a);
    for(i=1;i<=a;i++){
    sum+=f(i);
	}
    printf("%d",sum);
    return 0;
}
int f(int k)
{
	int i,n=1;
	if(k==1){
		n=1;
	}else{
	   for(i=1;i<=k;i++)
		   n*=i;
	}
	return n;
}
答案错误50%求解答
god 4年前 回复TA
#include <stdio.h>

int sum(int i)
{
    if (i == 1)
        return 1;
    else
        return i*sum(i - 1);
}
void main()
{
    int i, n=5, s=0, total = 0;
    for (i = 1; i <= n; i++)
    {
        s = s+sum(i);
    }
    printf("%d", s);
}为什么有50错误
cjlu123 4年前 回复TA
#include<stdio.h>
int main()
{
    int n;
	int b=1,sum=0,i;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		b = b*i;
		sum = sum + b;
	}
	printf("%d",sum);
    return 0;
}

为社么错50%…??
cjlu123 4年前 回复TA
@cjlu123 #include<stdio.h> int main() {     int n; 	int b=1,sum=0,i; 	scanf("%d",&n); 	for(i=1;i<=n;i++) 	{ 		b = b*i; 		sum = sum + b; 	} 	printf("%d",sum);     return 0; }
cjlu123 4年前 回复TA
if(n==0)
	{
		printf("1");	
	}
为什么错50%??
雨天炎天 4年前 回复TA
@雨天炎天 找到错误了,打扰了……
雨天炎天 4年前 回复TA
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
    long int s=0,x=1;
    int n;
    scanf("%ld",&n);
    int i=1;
    for(;i<=n;i++){
    	x=x*i;
    	s+=x;
	}
	printf("%ld",s);
}
大师,为什么运行错误啊,他说:使用了系统禁止的操作系统调用,看看是否越权访问了文件或进程等资源
jj 4年前 回复TA
@^0^快乐 n不能大于20不能小于0哦,你先试下改正这个
luckyboy 4年前 回复TA
@马欢 elsereturn0不行