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

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

hh 1年前 回复TA
大佬们,帮我看看我这个为啥只有50分啊
int main(){
	int n;
	scanf("%d",&n);
	int a,b;
	long long int sum=0,x;
	for(a=1;a<=n;a++){
		for(x=1,b=1;b<=a;b++){
			x=x*b;
		}
		sum=sum+x;
	}
	printf("%d\n",sum);
	return 0;
}
daniel 1年前 回复TA
为什么输入的n是无符号的啊?
元一 2年前 回复TA
@1021王俊峰 你这里属于溢出问题,Sn要用long int才放得进去更大的数
1021王俊峰 2年前 回复TA
#include<stdio.h> 
int main()
		{
			int Sn;
            int n;
            scanf("%d",&n);
			int i,j,t;
			for(i=1;i<=n;i++)
			{
				t=1;
				for(j=1;j<=i;j++)
				{
					t*=j;
				}
		         Sn+=t;
			}
			printf("%d",Sn);
			return 0;
		 } 

      //大佬们为啥结果对但是显示答案错误呢
北极星 2年前 回复TA
@grgr long  long
北极星 2年前 回复TA
@北极星 答案为50%
北极星 2年前 回复TA
#include<stdio.h>
int main()
{   long long int Sn=0;
    int n,i,a = 1;
    scanf("%d",&n);
    if(n==0)
    {

    printf("1");}
    else{
    for(i=1; i<=n; i++){
        a =a*i ;
        Sn = Sn + a;
    }
    printf("%lld",Sn);}
    return 0;
}
grgr 2年前 回复TA
#include <stdio.h>
int a(int x)
{
	if(x==1)
	{
		return 1;
	}
	else
	{
		return a(x-1)*x;
	}
}
int main()
{
	int n;
	scanf("%d",&n);
	int i,Sn=0;
	for(i=1;i<=n;i++)
	{
		Sn=a(i)+Sn;
	}
	printf("%d",Sn);
}
为什么错了
Oxygen 2年前 回复TA
#include <stdio.h>
#include <string.h>
#include <math.h>
int fun(int i)
{
    if (i == 0)
        return 1;
    return i * fun(i - 1);
}

int main()
{
    int n, i;
    scanf("%d", &n);
    long int sn = 0;
    for (i = 1; i <= n; i++)
    {
        sn += fun(i);
    }

    printf("%ld", sn);
    return 0;
}

求大佬看一下为啥错了
jionghunbulong 2年前 回复TA
@听说过白菜吗 你 sum 的输出格式有误 应该是lld 或 i(大写)64d,如果你用ld,编译器会自动将类型变换为long。