C语言:求n的阶乘/求1!+2!+.....+n!

       首先求n的阶乘,我们先要产生1-n的数字,然后累乘起来,利用for循环来实现。

       所以求n的阶乘的具体代码如下:

#include <stdio.h>
#include <stdlib.h>
int main()
{
	int i = 0;
	int n = 0;
	int ret = 1;
	scanf_s("%d", &n);//输入n
	for (i = 1; i <= n; i++)//产生1-n的数
	{
		ret = ret*i;//将i累乘赋值给ret
	}
	printf("%d", ret);
	system("pause");
	return 0;
}

       接下来我们求1!+2!+.....+n!

       根据上面的n的阶乘,我们可以构想在for循环的外侧再加入一个for循环即可以产生阶乘的累加。

       初步代码实现如下:(假设我们求1.2.3的阶乘累加起来,我们预计的结果是1+2+6=9)

#include <stdio.h>
#include <stdlib.h>
int main()
{
	int i = 0;
	int n = 0;
	int num = 0;
	int ret = 1;
	for (n = 1; n <= 3; n++)//在外面嵌套一层for循环
	{
		for (i = 1; i <= n; i++)
		{
			ret = ret*i;
		}
		num = num + ret;//每次的ret累加给num
	}
	printf("%d\n", num);
	system("pause");
	return 0;
}

       但最终运行的结果如下:


       运行的结果是15,并不是我们预计的9,所以对代码进行调试发现ret在不断循环中发生了改变。所以我们需要在每次开始循环之前需要对ret重新赋值为1。

       修改的代码如下:

#include <stdio.h>
#include <stdlib.h>
int main()
{
	int i = 0;
	int n = 0;
	int num = 0;
	int ret = 1;
	for (n = 1; n <= 3; n++)
	{
		ret = 1;//在循环之前将ret赋值为1
		for (i = 1; i <= n; i++)
		{
			ret = ret*i;
		}
		num = num + ret;
	}
	printf("%d\n", num);
	system("pause");
	return 0;
}

       这样改动之后的代码的结果就正确了,为9。

       在写完这段代码之后,发现这段代码还可以进行简化,所以我们使用一个for循环就可以实现。思路可以理解为1的阶乘乘2就是2的阶乘,2的阶乘乘3就是3的阶乘,把每一次的阶乘结果相加就是n的阶乘。

       所以最终优化的代码如下:

#include <stdio.h>
#include <stdlib.h>
int main()
{
	int i = 0;
	int n = 0;
	int num = 0;
	int ret = 1;
	for (n = 1; n <= 3; n++)
	{
		ret = ret*n;//求出每一个数的阶乘
		num = num + ret;//累加给num
	}
	printf("%d\n", num);
	system("pause");
	return 0;
}



  • 30
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值