c++语言 n的阶乘相加

#include<iostream.h>intmain(){intn,i,j,s=1,sum=0;cout<<"请输入n的值:";cin>>n;for(i=1;i<=n;... #include<iostream.h>
int main()
{
int n,i,j,s=1,sum=0;
cout<<"请输入n的值:";
cin>>n;
for(i=1;i<=n;i++)
{

for(j=1;j<=i;j++)
{
s=s*j;
}
sum+=s;
}
cout<<sum<<endl;
}
看看那步出问题了,结果不对啊
展开
 我来答
帐号已注销
推荐于2018-04-07 · TA获得超过296个赞
知道小有建树答主
回答量:144
采纳率:0%
帮助的人:112万
展开全部
第二个循环有问题,
s存储每一次阶乘的值,但没有初始化,举例:
当i=2时,计算得出s=2;
当i=3时,s=s*1*2*3=2*1*2*3=12,明显是错的
这些同楼上的看法,下面是我写的一个程序,你借鉴下吧(不需要初始化s,也只需单循环,比较较简单),求采纳(程序已经测试无误了)
#include<iostream.h>
int main()
{
int sum=0,s=1,i,n;
cout<<"请输入n的值:";
cin>>n;
for(i=1;i<=n;i++)
{
sum+=(s*i);
s*=i;
}
cout<<sum<<endl;
return 0;
}
日月明自光明3
2012-11-19 · 超过28用户采纳过TA的回答
知道答主
回答量:74
采纳率:0%
帮助的人:77.9万
展开全部
s存储每一次阶乘的值,但没有初始化,举例:
当i=2时,计算得出s=2;
当i=3时,s=s*1*2*3=2*1*2*3=12,明显是错的

自己应该会改吧?

另外:算下一个数的阶乘时,之前的结果可以保存起来,直接乘以当前值即可,没有必要再从1做一次循环了!自己思考下!
追问
for(j=1;j<=i;j++)
{
s=1;
s=s*j;
}
sum+=s;
我在上面初始化s=1 还不行 还是出错啊 呃呃呃
追答
看看楼下的代码,s每次存储的是当前循环变量的阶乘值,计算结果是正确的
但是过程有点小瑕疵,改成这样更好
for(i=2; i<=n; i++)
{
s = s * i;
sum += s;
}

这样修改基于两点:
1.1的阶乘为1,这个不用再计算了;
2.s存储的就是当前数的阶乘,很容易理解。而楼下的代码,每次循环多用了一次乘法运算,不易读懂!
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xiaobomo
2012-11-19 · TA获得超过523个赞
知道小有建树答主
回答量:533
采纳率:100%
帮助的人:364万
展开全部
每次运算玩后,s要重新置1哈,亲
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式