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

注意事项: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
为什么两次for循环来表示的话就算是long int也不行
求大佬来解决
#include<stdio.h>
int main()
{
	int n, i, j;
	long int s = 0, num = 1;
	scanf("%d",&n);
	for(i = 1; i <= n; i++)
	{
		for(j = 1; j <= i; j++)
		{
			num = num * j;
			
		}
		s = s + num;
		num = 1;
	} 
	printf("%d",s);
	return 0;
}
JUNE 3年前 回复TA
@Kohler #include <stdio.h>  int main() {     int i,j;     long int sum = 0;     unsigned int n,s = 1;     scanf("%d",&n);     for(i = 1;i <= n;i++){           j = i;           if(j > 0)         {             s = s*j;             j--;         }         sum  = sum +s;     }     printf("%ld",sum);      return 0; }
JUNE 3年前 回复TA
@Kohler 你这应该是求n的阶乘
闻弦知雅意 3年前 回复TA
@于是疯疯癫癫又是一天 我就遇到这种现象了,不知道怎么回事,多谢你啦
于是疯疯癫癫又是一天 3年前 回复TA
sum数据类型定义为int就是答案错误50,改成long int就正确了
Kohler 3年前 回复TA
#include <stdio.h>
int main(){
	int i,n;
	long int sum=0;
	int a=1;
	scanf("%d",&n);
	for(i=1;i<=n;i++){
		a=a*i;
		sum+=a;
	}
	printf("%ld",sum);
	return 0;
} 
求纠正
xisoni 3年前 回复TA
#include <stdio.h>
int main()
{
    int f(int n);
    int n,Sn;   
	scanf("%d",&n);
	if(n<20)
	{
	Sn=f(n);
    }
	printf("%d",Sn); 
}
int ff(int n)
 {
 	if(n==1)
 	return 1;
 	else
 	return n*ff(n-1);
 }
int f(int n)
{
	int result;
	if(n==1)
	return 1;
	else
	return ff(n)+f(n-1);
}
求,纠正,谢谢
Stellaris 3年前 回复TA
#include<stdio.h>

int factorial(int);

int main()
{
	int n;
	scanf("%d",&n);
	int a[n];        
	for(int i=0;i<n;i++){
		a[i]=factorial(i+1);	
	}
	int s=0;
	for(int i=0;i<n;i++){
		s+=a[i];
	}
	printf("%d",s);
	return 0;
}

int factorial(int num)  
{
	int j,out=1;	
	for(j=num;j>=1;j--){ 
		out*=j;                    
	}
	return out;
}

为啥错误
今天吃啥外卖 3年前 回复TA
求纠正
今天吃啥外卖 3年前 回复TA
求纠正