1.题目:求1!+2!+3!+...+n!
2.解题:
2.1读题:
这题是要求阶乘的和,那我们是不是首先得知道阶乘是什么,1!=1,2!=1*2,3!=1*2*3,4!=1*2*3*4,这就是阶乘,各位应该回忆起来了吧
2.2思路:
那我们是不是首先应该把1!2!3!...n!的代码写出来,然后再把他们加起来就是了
2.3写代码:
#include <stdio.h>
int main()
{
int ret = 1,n=0;//输入n
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
ret *= i;
}
printf("%d",ret);
}
这个代码就是实现输入n就可以求n!,比如输入4,就会输出1*2*3*4的结果24。
分析一下这个代码:
主要就是for循环嘛,输入一个n,for循环就会循环n次,比如输入4,i就会分别等于1、2、3、4,第一次for循环里面就是ret = ret *i,就是ret = 1*1,第二次就是ret = 1*2,第三次就是ret = 2*3,注意我定义ret变量是定义在for外面的,所以每次乘出的结果会积累,这就是求单一阶乘的写法。
2.4把各个阶乘的值加起来:
#include <stdio.h>
int main()
{
int n = 0,sum=0;
scanf("%d",&n);
for(int j =1;j<=n;j++)
{
int ret = 1;
for(int i=1;i<=j;i++)
{
ret *= i;
}
sum +=ret;
}
printf("%d",sum);
}
这里就变了不少了,首先我们看丢里面的for循环,发现唯一变化的就是i<=n变成i<=j了,为什么呢?因为你第一次执行的是1的阶乘,第二次就要执行2的阶乘,是不是有个递增的趋势,前面的代码是只执行一个阶乘,执行一个n的阶乘(n是你自己输入几就是几),有个递增的趋势,说明这个n的位置,是要放一个从小到大的数字,所以我们放个j,然后在外面再套个for循环,外面就会执行n次,然后j每次会增大,增大的过程,里面的代码就会分别执行,1!、2!、3!、4!等等,最后再通过sum 把每次ret(ret就是每次阶乘的值)的值累加,就完成了
看了这么久希望你能学到东西,非常感谢你能不厌其烦看到这里,谢谢大家!