永发信息网

编程求阶乘的问题?

答案:4  悬赏:60  手机版
解决时间 2021-04-14 04:48
  • 提问者网友:最爱你的唇
  • 2021-04-13 16:07

求1-5的阶乘和

int n=0;int a=1;
for(int j=1;j<=5;j++)
{ a=1; //重置?为什么要重置,不重置的值是34863.重置了就对了
for(int i=1;i<=j;i++)
{ a=a*i;}
n=n+a;

想问一下具体的循环是怎么实现的(就是外层循环,内层循环具体怎么得到,举例比如当J=1,2,3;)还有重置的作用,以及不重置为何会得到34863这样的答案

需要详细点的分多少无所谓

最佳答案
  • 五星知识达人网友:鸠书
  • 2021-04-13 16:43

用!表示阶乘,不重置的话,计算出来的是1!+1!2!+1!2!3!+1!2!3!4!+1!2!3!4!5!, 所以是34863。


因为不重置,每次都在前一项的基础上乘了一个i!,但是我们只需要在前一项的基础上乘以i就行了,所以多乘了。


重置的话,虽然是正确的,但是多此一举嘛,搞什么二重循环?觉得cpu太快了么?已经算好4!了,算5!的阶乘,只需要在4!上乘以5就行了,非得重置为1,然后再乘1 2 3 4 5,太浪费了……


正常的写法应该是:


int n=0, a=1;


for (int i=1; i<=5; i++)


{


a*=i;


n+=a;


}

全部回答
  • 1楼网友:酒醒三更
  • 2021-04-13 18:37

外层开始第一次循环j=1

执行a=1

~~内层开始第一次循环i=1

~~执行a=a*i=1*1=1

执行n=n+a=0+1=1

外层开始第二次循环j=2

执行a=1

~~内层开始第一次循环i=1

~~执行a=a*i=1*1=1

~~内层开始第二次循环i=2

~~执行a=a*i=1*2=2

执行n=n+a=1+2=3

外层开始第三次循环j=3

执行a=1(如果不执行的话a任然等于2)

~~内层开始第一次循环i=1

~~执行a=a*i=1*1=1(如果刚才不执行的话a=2)

~~内层开始第二次循环i=2

~~执行a=a*i=1*2=2(如果刚才不执行的话a=4)

~~内层开始第三次循环i=3

~~执行a=a*i=2*3=6(如果刚才不执行的话a=12)

执行n=n+a=3+6=9(如果刚才不执行的话n=15)

外层开始第四次循环j=4

…………

后面的就省略不写啦

  • 2楼网友:骨子里都是戏
  • 2021-04-13 18:27

在这段代码中,外层循环的目的是依次枚举从1到5一共5个数字,存入变量j;内层循环的作用是求j的阶乘,结果保存为变量a,然后把a累加到变量n。

求阶乘需要从1开始,沿自然数列依次向上乘,结果累乘到变量a,所以每次内层循环开始时变量a必须被重置成1,否则求下一个数字的阶乘时就不是从1开始计算了。

希望LZ能明白。

  • 3楼网友:英雄的欲望
  • 2021-04-13 17:07

这个方法貌似麻烦了

之所以重至 是因为里面每次循环需要重新算一次阶乘

所以要把乘数归1 算出来的结果才对

但是这样写 就有点麻烦了 其实一道循环就够了

下面贴下我的代码

希望我的回答对你有帮助 如果有不懂可以继续问我

如果你满意我的回答 请选为满意答案

#include <iostream.h>

void main() { int sum=0,m=1; for(int i=1;i<=5;i++) { m*=i; sum+=m; } cout<<sum<<endl; }

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯