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

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

李哟哟 5年前 回复TA
@你是年少的欢喜 我也是这样  但vs上可以通过  好烦
cocacola 5年前 回复TA
@cocacola 这个为啥在C语言网不通过啊   %d前面的空格删除
cocacola 5年前 回复TA
#include<stdio.h>
#include<conio.h>   
int jc(int s);
int main()
{
	int n,Sn;int j=0;
	int i=0;
	scanf(" %d",&n);
	if(0<n&&n<=20)
	{
	int a[n];
	for (j=1;j<=n;j++)
	    for (i;i<j;i++)
	       a[i]=jc(j);
	       for (i=0;i<n;i++)
	            Sn+=a[i];
	            printf(" %d",Sn);
	            	getch();
	            	
	        }
}
int jc(int s)
{
int c;
     if (s==0||s==1) 
          c=1;
          else 
          c=s*jc(s-1);
          return c ;
      }
金洛 5年前 回复TA
#include<stdio.h>
int fun(int i)
{
    if(i==1)
        return 1;
    else
        return i*fun(i-1);
}
int main(void)
{
    int sum=0,n,i;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    sum=sum+fun(i);
	printf("%d", sum);
	return 0;
}这个如何
Dd 5年前 回复TA
楼主你这答案就是错的
Singer 5年前 回复TA
#include<stdio.h>
int jiecheng(int a)
{
	int z=1;
	for(int i=1;i<a+1;i++)
		z=z*i;
	return z;
}


int main()
{
	long int sum=0;
	int n;
	int jiecheng(int a);
	scanf("%d",&n);
	for(int i=1;i<n+1;i++)
		sum+=jiecheng(i);
	printf("%ld",sum);
	return 0;
}
为什么不停报错啊
马欢 5年前 回复TA
#include<stdio.h>
int main()
{
	int n,i,j;
	long int Sn=0;
	long int sn(int x);
	scanf("%d",&n);
	if(n<=0)
	{
		return 0;
	}
	else
		if(n<=20)
		{
	for(i=1;i<=n;i++)
	{
		Sn=Sn+sn(i);
	}
	printf("%Ld  \n",Sn);
		}
		else
        return 0;
}
	long int sn(int x)
	{
		long int s=1,j;
		for(j=x;j>=1;j--)
		{
			s=s*j;
		}
		return (s);
	}
大神真的是没办法了!!!!!怎么不对????
你是年少的欢喜 5年前 回复TA
请帮忙看看哪里错了
#include"stdio.h"
int main ()
{
	int n,Sn=0;
	int s1=1;
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		for(int m=i;m>=1;m--)
		{
			s1=s1*m;
			m--;
		}
		Sn+=s1;
	}
	printf("%d\n",Sn);
	return 0;
}
小刘 5年前 回复TA
#include<stdio.h>
int main() 
{
	int a=1,b=0,i,j,t;
	int sn; 
	scanf("%d",&t);
	for(i=1;i<=t;i++)
	{
		for(j=1;j<=i;j++)
		{
			a=a*(b+1);
			b++;
		}
		sn=a+sn;
		a=1;
		b=0;
	}
	printf("%d",sn);
	return 0;
} 
自己试着是对的,但是提交就答案错误,怎么办啊大神们?
狐狸十一 5年前 回复TA
#include <stdio.h>

int jie(int n)
{
    int k;
    if (n <= 1)
        k = 1;
    else
        k = n * jie(n - 1);
    return k;
}
int main()
{
    int sum, c, d = 1;
    scanf("%d", &c);
    for (int i = 0; i < c; i++)
    {
        sum += jie(d);
        d++;
    }
    printf("%d", sum);
    return 0;
}
求大神帮忙指点一下