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

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

summer 5年前 回复TA
@汤旭辉 long int 要改成long long int
酷酷流浪猫 5年前 回复TA
#include"stdio.h"
#include"conio.h"
long long sum=0;
long long math()
{
	static int n=1;
	static long long num=1;
	num*=n;
	n++;
	return num;
}
int main()
{
	int i,n;
	scanf("%d",&n);
	if(n==0) sum=1;
	for(i=1;i<=n;i++)
		sum+=math();
	printf("%lld\n",sum);
	getch();
	return 0;
}
编译器:vs2010(学习版)
90度微笑 5年前 回复TA
@18信二孙笑柯 long 不行  需要用long long
慢慢变美好 5年前 回复TA
#include<stdio.h>
long long  jiecheng(long n); //由于阶乘结果返回值太大需使用long long型
main()
{
    int a;
    long long num=0;
    scanf("%d",&a);
        for(int i=1;i<=a;i++){
        num+=jiecheng(i);
        }   
    printf("%lld",num);//这里注意输出也为 lld
}
//定义的阶乘函数
long long jiecheng(long n){
    if(n==1){
        return 1;
    }else{
        return n*jiecheng(n-1);
    }    
}
18信二孙笑柯 5年前 回复TA
错误50%,求大佬解答
#include <stdio.h>
int main()
{
long int sn=0,a,b,c,c1,n;
scanf("%d",&n);
for(c=1;c<=n;c++){
b=c;
a=c;
for(c1=1;c1<c;c1++){
a--;
b=b*a;
}
sn=sn+b;
}
printf("%ld",sn);
return 0;
}
神鬼一刀流 5年前 回复TA
@飞羽 写成 int main()
汤旭辉 5年前 回复TA
直接复制粘贴还是错百分50
11111 5年前 回复TA
#include<stdio.h>
int main()
{
	int i=0,n;
	long int sum=0,sum1=1;
	printf("请输入一个正整数n\n");
	scanf("%d",&n);
	while(i<n)
	{ i++;
	  sum1=sum1*i;
	  sum+=sum1;
	}
	printf("你输入的求和为%ld\n",sum);
	return 0;
}
nongzhen 5年前 回复TA
#include<stdio.h>
int main()
{
    int n,i;
    long int Sn=0,Si=1;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        Si=Si*i;
        Sn+=Si;
    }
    printf("%ld",Sn);
    return 0;
}
提交几遍了,都是错误50%,难受~
newfish 5年前 回复TA
@小白到大神 long long 不行?