C语言:计算 1! + 2! + 3! + ... + n!

题目:

从键盘输入一个值n,计算 1的阶乘 至 n的阶乘 的和

如:输入10,计算 1的阶乘 至 n的阶乘 的和 --> 计算:1! + 2! + 3! + ... + 10!

                    

 =========================================================================

                       

思路一:

效率比较低,会重复计算之前计算过的阶乘,但逻辑简单好理解 

总体思路:

(1). 使用两个循环内循环 外循环

内循环:循环生成 1~n 个数字,再依次相乘,实现1~n其中一个值的阶乘

外循环:利用内循环计算的阶乘值,实现阶乘相加

             

(2). 最后再进行打印

             

第一步:

(1). 生成相关变量:()

                 

int i = 0; -- 作为外循环的循环变量

                

int j = 0; -- 作为内循环的循环变量

              

int n = 0; -- 获取输入的数据。

             

int ret = 1; -- 把每个数的阶乘计算后赋值给该变量

因为0乘任何数都为0,所以初始化为1

             

int sum = 0; -- 内循环执行后将各个数的阶乘相加后赋值给该值,作为最终结果

                     

                     

(2). 实现输入数据和获取数据 -- scanf()函数

             

实现代码:

#include <stdio.h>
int main()
{
	int i = 0; //外循环
	int j = 0; //内循环
	int n = 0; //输入n
	int ret = 1; //把每个数的阶乘计算后赋值给该变量,因为0乘任何数都为0,所以初始化为1。
	int sum = 0; //外循环后将各个数的阶乘相加后赋值给该值,作为最终结果。

	//输入:
	scanf("%d", &n);//记得使用取地址符:&



	return 0;
}

实现图片:

                 


                 

第二步:

(1). 编写外循环,实现各个阶乘的值相加sum += ret;

            

(2). 注意:

             

外循环的条件变量 i 要初始化为 1:因为在内循环中要使用 i 作为循环条件阶乘要从1开始

                

每次内循环结束后要重新把 ret变量 赋值为 1:因为内循环使用变量ret实现一个值的阶乘后改变了ret的值,而轮到求下一个值的阶乘时

还是要从1开始乘起,所以ret应该还是1的。  (效率低的原因)

                     

实现代码:

#include <stdio.h>
int main()
{
	int i = 0; //外循环
	int j = 0; //内循环
	int n = 0; //输入n
	int ret = 1; //把每个数的阶乘计算后赋值给该变量,因为0乘任何数都为0,所以初始化为1。
	int sum = 0; //外循环后将各个数的阶乘相加后赋值给该值,作为最终结果。

	//输入:
	scanf("%d", &n);//记得使用取地址符:&

	//实现代码:
	for (i = 1; i <= n; i++) //外循环:实现阶乘相加,相加到 n!
	{
		ret = 1;//内循环中相乘后赋值给该变量,每次出了内循环后要重新刷新该变量(重点)
		
		//内循环:循环生成 1~i 个数字,再依次相乘
		for (j = 1; j <= i; j++)
		{
			ret = ret * j;//依次相乘再赋值给变量ret
		}

		sum += ret; //将各数的阶乘相加后赋给该值
	}

	return 0;
}

实现图片:

                 


                 

第三步:

(1). 编写内循环:循环生成 1~j 个数,再依次相乘,实现1~n其中一个值的阶乘

            

(2). 注意:内循环的条件变量 j 要初始化为 1:因为在内循环中要使用 j 进行相乘赋值为1防止0乘任何数为0

                     

实现代码:

#include <stdio.h>
int main()
{
	int i = 0; //外循环
	int j = 0; //内循环
	int n = 0; //输入n
	int ret = 1; //把每个数的阶乘计算后赋值给该变量,因为0乘任何数都为0,所以初始化为1。
	int sum = 0; //外循环后将各个数的阶乘相加后赋值给该值,作为最终结果。

	//输入:
	scanf("%d", &n);//记得使用取地址符:&

	//实现代码:
	for (i = 1; i <= n; i++) //外循环:实现阶乘相加,相加到 n!
	{
		ret = 1;//内循环中相乘后赋值给该变量,每次出了内循环后要重新刷新该变量(重点)
		
		//内循环:循环生成 1~i 个数字,再依次相乘
		for (j = 1; j <= i; j++)
		{
			ret = ret * j;//依次相乘再赋值给变量ret
		}

		sum += ret; //将各数的阶乘相加后赋给该值
	}

	return 0;
}

实现图片:

                    

思路一:最终代码和实现效果:

最终代码:

#include <stdio.h>
int main()
{
	int i = 0; //外循环
	int j = 0; //内循环
	int n = 0; //输入n
	int ret = 1; //把每个数的阶乘计算后赋值给该变量,因为0乘任何数都为0,所以初始化为1。
	int sum = 0; //外循环后将各个数的阶乘相加后赋值给该值,作为最终结果。

	//输入:
	scanf("%d", &n);//记得使用取地址符:&

	//实现代码:
	for (i = 1; i <= n; i++) //外循环:实现阶乘相加,相加到 n!
	{
		ret = 1;//内循环中相乘后赋值给该变量,每次出了内循环后要重新刷新该变量(重点)
		
		//内循环:循环生成 1~i 个数字,再依次相乘
		for (j = 1; j <= i; j++)
		{
			ret = ret * j;//依次相乘再赋值给变量ret
		}

		sum += ret; //将各数的阶乘相加后赋给该值
	}

	//打印:
	printf("%d\n", sum);

	return 0;
}

实现效果:

                    

 =========================================================================

                       

思路二:

在原本已计算的阶乘上再乘上“下一个数”,

实现“下一个数”的阶乘

总体思路:

(1). 只编写一个循环,求第一个值的阶乘后就直接赋值给sum,下一个值的阶乘直接在上一个值阶乘的基础上乘以下一个值,得下一个值的阶乘

           

(2). 最后再进行打印

             

第一步:

(1). 生成相关变量

                 

int i = 0; -- 作为循环变量

                

int n = 0; -- 获取输入的数据。

               

int ret = 1; -- 把每个数的阶乘计算后赋值给该变量

因为0乘任何数都为0,所以初始化为1

             

int sum = 0; -- 外循环执行后将各个数的阶乘相加后赋值给该值,作为最终结果

                     

                     

(2). 实现输入数据和获取数据 -- scanf()函数

             

实现代码:

#include <stdio.h>
int main()
{
	int i = 0; //循环变量
	int n = 0; //输入n
	int ret = 1; //把每个数的阶乘计算后赋值给该变量,因为0乘任何数都为0,所以初始化为1。
	int sum = 0; //外循环后将各个数的阶乘相加后赋值给该值,作为最终结果。

	//输入:
	scanf("%d", &n);//记得使用取地址符:&


	return 0;
}

实现图片:

                 


                 

第二步:

(1). 编写循环,求完第一个数的阶乘后,直接给到sum中,求第二个数的阶乘时,再在第一个数阶乘的基础上乘上第二个数,就是第二个数的阶乘了。以此类推……

            

(如:输入3,求 1! + 2! + 3

求了 1! 后赋给sum

求 2!时,就在 1!的基础上乘 2 就是2的阶乘了,再赋给sum相加,实现 1! + 2!

求 3!同理,以此类推

            

(2). 注意:循环的条件变量 i 要初始化为 1:因为阶乘要从1开始

                     

实现代码:

#include <stdio.h>
int main()
{
	int i = 0; //循环变量
	int n = 0; //输入n
	int ret = 1; //把每个数的阶乘计算后赋值给该变量,因为0乘任何数都为0,所以初始化为1。
	int sum = 0; //外循环后将各个数的阶乘相加后赋值给该值,作为最终结果。

	//输入:
	scanf("%d", &n);//记得使用取地址符:&

	//实现代码:
	for (i = 1; i <= n; i++) //外循环:实现阶乘相加,相加到 n!
	{
		ret = ret * i;//依次相乘再赋值给变量ret
		

		sum += ret; //将各数的阶乘相加后赋给该值
	}

	return 0;
}

实现图片:

                    

思路二:最终代码和实现效果:

最终代码:

#include <stdio.h>
int main()
{
	int i = 0; //循环变量
	int n = 0; //输入n
	int ret = 1; //把每个数的阶乘计算后赋值给该变量,因为0乘任何数都为0,所以初始化为1。
	int sum = 0; //外循环后将各个数的阶乘相加后赋值给该值,作为最终结果。

	//输入:
	scanf("%d", &n);//记得使用取地址符:&

	//实现代码:
	for (i = 1; i <= n; i++) //外循环:实现阶乘相加,相加到 n!
	{
		ret = ret * i;//依次相乘再赋值给变量ret
		

		sum += ret; //将各数的阶乘相加后赋给该值
	}

	//打印:
	printf("%d\n", sum);

	return 0;
}

实现效果:

  • 22
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高高的胖子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值