C语言 计算 1!+2!+3!+……+10!

本文探讨了一个使用双重循环计算阶乘之和的C语言程序,分析了因未重置变量导致的错误,并提供了两种解决方案。第一种是通过在外层循环后重置set变量,第二种是利用数学知识优化代码,避免了额外的循环。这两种方法都有效地解决了问题并提高了效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一种方法:双重for循环

使用双重for循环的时候,外层循环的目的是阶乘之间的相加运算,内层循环的目的是计算各自的阶乘

但是这样的代码会很容易出现一个问题。

#include<stdio.h>
int main()
{
	int i = 0;
	int set = 1;
	int n = 0;
	int sum = 0;
	for (n = 1; n <= 3; n++)
	{
		for (i = 1; i <= n; i++)
		{
			set = set * i;
		}
		sum = sum + set;
	}
	printf("%d\n", sum);
	return 0;
}

  • 正常应该是9,但是确输出了15,为什么呢? 

原因分析 

其实原因就是出现在了内层循环的set,因为在这个代码当中,set没有赋值操作,也就是每次循环之后set的值都会增加,但是外层开始第二次循环时,内层的set应该从1开始才是正确的。所以应该加入一个set重新赋值1的操作。

#include<stdio.h>
int main()
{
	int i = 0;
	int set = 1;
	int n = 0;
	int sum = 0;
	for (n = 1; n <= 5; n++)//阶乘之间的求和
	{
		for (i = 1; i <= n; i++)//输出各自的阶乘
		{
			set = set * i;
		}
		sum = sum + set;
		set = 1;//重新为ret赋值
	}
	printf("%d\n", sum);
	return 0;
}

 

第二种方法:使用数学知识优化代码

  1.     4!= 3!*4
  2.     5!= 4!*5

通过上述的数学知识可知,一个数字的阶乘就是上一个数字的阶乘*数字本身,那么我们就可以设置一个变量,直接在一个循环当中把所有出现过的阶乘全部加在一起,具体操作如下:

  • 此时的set不需要重新赋值,而是直接为上一次的运算结果
#include<stdio.h>
int main()
{
	int i = 0;
	int set = 1;
	int n = 0;
	int sum = 0;
	scanf("%d", &n);
	//循环产生1--n的数字
	for (i = 1; i <= n; i++)
	{
		set = set * i;
		sum = sum + set;
	}
	printf("%d\n", sum);

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值