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

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

onemorecod 4年前 回复TA
@onemorecod 粘贴错了#include <stdio.h>  int main() { 	int n; 	int i,j; 	scanf("%d",&n); 	double cnt,sum=0; 	 	for(i=0;i<n;i++){ 		cnt = 1; 		for(j=0;j<=i;j++){ 			cnt *= (j+1); 		} 		sum += cnt; 	} 	 	printf("%.0f
",sum); 	 	return 0; }
onemorecod 4年前 回复TA
#include <stdio.h>

int main()
{
	int n;
	scanf("%d",&n);
	int i,j;
	int m=0,cnt=1,sum=0;
	int a=2;
	
	for(i=0;i<n;i++){
		cnt = 1;
		for(j=0;j<i;j++){
			cnt *=10;
		}
		m += a*cnt;
		sum += m;
	}
	
	printf("%d",sum);
	
	return 0;
}
zsai 4年前 回复TA
#include<stdio.h>
long int n;
long int cycle(long int n) {
	long int f;
    if(n==0) return 1;
	f = n * cycle(n - 1);
    return f;
}

int main()
{
    int i;
    long int result = 0;
    scanf("%ld", &n);
    for (i = 1; i <= n; i++) {
        result += cycle(n);
    }
    printf("%ld", result);
    return 0;
}
这个答案为啥错了呢
zsai 4年前 回复TA
#include<stdio.h>
int cycle(n){
    return n*cycle(n-1);
}

int main()
{
    int i,n;
    long int result = 0;
    scanf("%d",&n);
    for(i=1;i=n;i++){
        result += cycle(n);
    }
    printf("%ld",result);
    return 0;
}

为啥这个一直超时
hooooo 4年前 回复TA
@黄金瞳 p也得设成长整型
我真不是蠢猪 4年前 回复TA
@yeats 输出的时候应该要%ld  这样子吧
yeats 4年前 回复TA
#include<stdio.h>
int main()
{
    int a=1,sum=0,n,i;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        a*=i;
        sum+=a;
    }
    printf("%d",sum);
    return 0;
}
这个难道不是最简单的吗,为啥是错的
思无邪 4年前 回复TA
@思无邪 @uq_62082423588 明白了,谢谢。
思无邪 4年前 回复TA
@思无邪 @13401114135 了解了,多谢。
智者不入爱河 4年前 回复TA
#include<stdio.h>
int n=0;
long long  f(n)
{
	if (n == 1 || n == 0)
		return 1;
	else
		return f(n - 1)*n;
}
long long  s(n)
{
	if (n == 1)
		return 1;
	else
		return s(n - 1) + f(n);
}
int main()
{
	scanf("%d", &n);
	if (n <= 20)
	{
		printf("%d", s(n));
	}
	return 0;
}
求大佬康康我,运行没有问题,也改成长整型了,可还是错了