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

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

一叶知秋 4年前 回复TA
@一叶知秋 好的 用long int 谢谢你
墨染 4年前 回复TA
@一叶知秋 用int类型当n=20时会有溢出
花开若相惜 4年前 回复TA
@上单皇阿玛 啊,50错误,输出定义为long int 了还是不行。
MusicGeek 4年前 回复TA
通过写函数来解决的笨办法
{
    int i,a,k,sn;
    int sum(int n)
    {
        int plus = 1;
        for (i=1;i<=n;i++)
        {
            plus = plus*i;
        }
        return plus;
    }

    printf("请输入Sn的n值:");
    scanf("%d",&a);
    for (k=1;k<=a;k++)
    {
        sn += sum(k);
    }
    printf("Sn的值为:%d",sn);
    return 0;
}
一叶知秋 4年前 回复TA
请问我的为什么错了呢??求大佬帮忙
#include<stdio.h>
int main() {
	int sn=1;
	int n;
	int i = 1,a=0;
	scanf("%d", &n);
	while (i++ < n) {
		a = 1;
		for (int k = 1;k <= i;++k) {
			a = a * k;
		}
		sn = sn + a;
	}
	printf("%d", sn);
}
wenshang 4年前 回复TA
@上单皇阿玛 我也遇到同样问题,看楼主答案才发现输出数需要定义长整型,防溢出
安利天天 4年前 回复TA
@上单皇阿玛 哇,我跟你的几乎一样,也是错误50
emmmmm 4年前 回复TA
@emmmmm 不知道错在哪里
emmmmm 4年前 回复TA
#include<stdio.h>
int main()
{
  int b,i,j;
  long int sum=0,a;
  scanf("%d",&b);
  for(i=1;i<=b;i++)
  {
    a=1;
	for(j=1;j<=i;j++)
    a*=j;
	sum+=a;
  }
  printf("%d",sum);
  return 0;
}
上单皇阿玛 4年前 回复TA
为什么我这个在编译器上编译的结果是对的,但是提交就是答案错误百分之50 了呢
#include <stdio.h>
#include <string.h>
int fum(int n)
{
	int i,j,a=1;

	for(i=1;i<=n;i++)
	{
		a=a*i;
	}
	return a;
}
	int main()
	{
		int b=0,n,i;
		scanf("%d",&n);
		for(i=1;i<=n;i++)
			b=b+fum(i);	
		printf("%d",b);	
	 }