输入一个数N输出它的阶乘N! 以及输出1!+ 2!+...N!的值

输入一个数N输出它的阶乘N! 以及输出1!+ 2!+...N!的值。

一.输入一个数N,输出N!。

int main()
{
	int n = 0;
	int i = 0;
	int sum = 1;                
	scanf("%d", &n);
	for (i = 1; i <= n; i++)
	{
		sum *= i;
	}
	printf("%d", sum);
	return 0;
}

二.输入一个数N,输出1!+ 2!+…N!的值。

方法一.通过上面计算N的阶乘,我们得到了N! 再在外面套一个循环将他们加在一起。理论成立现在开始实践。

int main()
{
	int n = 0;
	int j = 0;
	int i = 0;
	int sum = 1;
	int set = 0;
	scanf("%d", &n);
	for (j = 1; j <= n;j++)
	{                
		for (i = 1; i <= j; i++)
		{
			sum *= i;              
		} 
		set += sum; 
	}
	printf("%d", set);
	return 0;
}

在求N!的基础上在外面套一层for(j)的循环,通过for(j)的循环将里面1!到N!阶乘相加。
倒是在实际运行中我们发现并没有达到我们想要的效果
错误代码演示
当n = 3时 此处应该输出9,但是实际输出15。让我们重新检查写的写的代码,这里向大家提供两种方法。

方法1
此处以VS2022举列,我们可以按住fn+f10进入调试,在编译器上方找到调试,找到窗口
调试窗口
打开窗口之后,通过按f10来一条一条的运行程序,从而来找到错误的地方。
程序调试
方法2
我们可以在可能出现错误的地方打印它的值
程序调试查错
当我们输入3时,for(i)依次输出 1 ,2, 12,此时我们就能发现错误为什么当for(i = 1;i <= 3;i++)时输出12,而不是9.
通过检查我们发现,原来sum的值都是从12n 来计算,因此我们只需将上一次的结果sum保留,然后在在它的基础上乘下一个数,就是下一个数的阶乘。

int main()
{
	int n = 0;
	int j = 0;
	int i = 0;
	//int sum = 1;
	int set = 0;
	scanf("%d", &n);
	for (j = 1; j <= n;j++)
	{                
		int sum = 1;  
		 //这样sum的值就会被保留而不会每次从1开始
		for (i = 1; i <= j; i++)
		{
			sum *= i;
		} 
		printf("%d\n", sum);
		set += sum;
	}
	//printf("%d", set);
	return 0;
}

方法二
方法一的代码比较繁琐,不是很高效。接下来为大家介绍另一种高效的方法。

int main()
{
	int n = 0;
	int i = 0;
	int sum = 1;
	int set = 0;
	scanf("%d", &n);
	for (i = 1; i <= n; i++)  
	{
		sum *= i;        
		set += sum;  //创建变量set
	}
	printf("%d", set);
	return 0;
}

这种方法比第一种方法简单太多(手动狗头)。通过两种不同的方法,不同的思路,从而写出不同的代码。博主刚开始也是使用的第一种方法(苦涩),但是当我慢慢思考后发现竟然只需要稍微改动一下就行。但是我也会因为能想到不同的方法二高兴。学习编程之路任重而道远啊,但是我们也要能够从其中找到值得开心的事。这样才不至于从入门到放弃。哈哈哈

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

清隆綾小路

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

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

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

打赏作者

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

抵扣说明:

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

余额充值