使用c语言求阶乘的和,详解

       一、前言

        之前我们学习到了n的阶乘是如何使用c语言实现,今天让我们来看看如何使用c语言实现n阶乘的累加,之前我们使用for循环实现阶乘,那么我们在它的基础上进行一个优化,进行一个for循环的嵌套,来完成n阶乘的累加。

        二、我们来做一道题吧。

        题目描述:

        杰克又又又在做数学题了,这次他对之前使用c语言编写n的阶乘的程序有了更深一步的思考,我是不是可以去使用c语言进行n阶乘的累加呢,请你帮助杰克,使用c语言实现从1到10的阶乘的累加。

        输入描述:

        无

        输出描述:

        一行,输出1到10阶乘累加的和

        三、题目分析

        在这道题中,表明了我们需要进行一个n阶乘的累加,这个n值为10,我们参考之前写的计算n阶乘的代码:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int i = 1;
    int n = 1;
    int ret=1;
    scanf("%d", &n);
    for (i = 1;i <= n;i++)
    {
        ret = ret*i;
    }
    printf("您的计算结果是:%d", ret);
    return 0;
}

        这是n阶乘的代码,我们来对这个代码进行改进,实现n阶乘的累加

        四、代码展示

        

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int i = 1, n = 1, ret = 1;
	int sum=0;
	//从1的阶乘开始计算
	for (n = 1;n <= 10;n++)
	{
		ret = 1;
		//计算阶乘并将得到的阶乘数累加
		for (i = 1;i <= n;i++)
		{
			ret = ret * i;
		}
		sum += ret;
	}
		
	printf("%d\n", sum);
	return 0;
}

       五、代码分析

        这是对之前代码进行修改之后得到的10阶乘的累加,拿出之前的代码,我们这里的代码作用是计算n的阶乘,但是我们需要求的是n阶乘的累加,那么这里我们需要嵌套一个for循环,这个for循环的作用是改变n的值使阶乘递增,我们就设置这个变量为n,开始循环,在循环的过程中我们发现,缺少一个可以存放每次阶乘运算之后结果的和,那我们定义一个sum来存放,初始化为0,好啦,这里程序是不是差不多了,我们运行一下,但是很可惜,这里会出错,程序不会报错,但是会输出一个很大的值,博主在第一次写的时候也是想了好久,这里有一点需要注意。

        

        我们对程序进行修改使n=5,正常来说n的阶乘是5的话输出是120,累加再怎么加也不会是34863这么大的值,所以程序是有问题的,我们通过调试发现,是ret没有初始化的问题。

        六、对ret的初始化

        我们发现程序的问题是ret没有初始化导致的上一次ret的值还留在ret中,残留的数据继续进行运算导致的运算结果出错,那么我们这里发现问题就解决他,我们在外层for循环的位置对ret进行初始化,值为1,这样我们每次计算阶乘的时候都会重新从1开始阶乘的运算,解决了这个问题我们再次运行程序。

        运行结果:

        

        最后计算出的结果是4037913,与计算器计算的结果一致,这里我们就算是完成了所有的运算。

        七、代码优化

        那么这个for循环的嵌套好长啊,要使用两个for循环,我们有没有什么更简化的方式可以计算出n阶乘的累加呢,哎,这里还真有,话不多说,上代码

        代码展示:

        

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int i = 1, n = 1, ret = 1;
	int sum=0;
	for (n = 1;n <= 10;n++)//算法优化
	{
		ret = ret * n;
		sum = sum + ret;
	}
		
	printf("%d\n", sum);
	return 0;
}

        这里我们只使用了一个for循环就完成了代码的运算,结果与之前是一模一样,在这段代码中,我们每次计算一个阶乘之后,求和一次,n每次递增的时候都乘之前数的阶乘结果来进行阶乘的递增,这么说可能有些绕口,就是我们不用像之前的代码对ret初始化,我们保留之前ret中上一次阶乘的值,比如,之前ret中是3的阶乘,那么现在n是4,我们使用4去乘3的阶乘就得到了4的阶乘,之后我们将计算出4的阶乘的结果加到sum中,完成了我们计算阶乘和累加的过程。

        这样这个代码是不是看起来简洁多了。

        好啦,我们今天到这里就结束喽,希望大家也可以学习到新的知识呢,共勉!

  • 31
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值