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