代码实现:求前N个数字的阶乘

举报
念君思宁 发表于 2023/02/15 14:25:41 2023/02/15
【摘要】 代码实现:求前N个数字的阶乘

对于求:1!+2!+3!+4!+5!+…………+N!

对于上述代码,主要在于求阶乘!但是对于阶乘使什么?怎样去求?这个就需要我们数学知识了!

下面使笔者搜索百度百科里面的内容:

一个正整数的阶乘factorial)是所有小于及等于该数的正整数,并且0的阶乘为1。自然数n的阶乘写作n!。  原文链接为:阶乘_百度百科  对于不知道阶乘是什么的读者可以去看一下,文章仅供参考!

对于求:1!+2!+3!+4!+5!+…………+N!我们可以进行分步骤来求:

因此我们可以先求:N!(N的阶乘)

因此,我们只需要一个for循环就能将N的阶乘求出来!

笔者的简单代码为:

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

上述代码,for循环,将 i 依次与ret进行乘法运算,如然后在将得出的值,重新赋值给ret!

从而得出正确结果!

 既然,我们已经简单的知道如何去求N的阶乘了,那么对于1!+2!+3!+4!+5!+…………+N!

也就应该有着自己的思路去正确书写代码了!

下面是笔者的简单代码仅供读者参考!

#include <stdio.h>
int main()
{
	int n = 0;
	int i = 0;
	int ret = 0;
	int sum = 0;
 
	for (n = 1; n <= 10; n++)        //求1到n=10的阶乘
	{
		ret = 1;  //对ret进行初始化!
 
		for (i = 1; i <= n; i++)
		{
			ret = ret * i;
		}
 
		sum = sum + ret;
	}
	printf("%d\n", ret);
	return 0;
}

在上述代码中,读者需要注意的是,每次循环执行时候,都需要将ret进行初始化,要不然ret是上一次循环后的结果,将会很大,从而出现程序错误!对于该段代码,n的数值也不能太过于大,要不然程序会崩溃,解决方法为:将int类型改为:long long 类型,但是也不建议出现太过于膨大的数值!

对于上述代码:用了两层for循环,外层是将n的值赋以1到10,从而进入内层循环,内层循环主要是对从1到n的阶乘进行乘法运算!然后每一次内层循环后,都将得出的结果赋值给sum,在执行下一次的循环,ret重置!

因此输出最后的结果:

 到此为止,笔者的内容已经详细讲解出来,对于读者的疑惑,请及时联系笔者进行更改!

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。