请大家帮忙看下这道简单的C++题目

题目要求求1!+2!+3!+……+20!的值这是我写的程序:#include<iostream>usingnamespacestd;intmain(){floatn=1,... 题目要求求1!+2!+3!+……+20!的值
这是我写的程序:
#include <iostream>
using namespace std;
int main ()
{
float n=1,sum=0;

while (n<=20)
{
int i=1,t=1;
while (i<=n)
{

t=t*i;
i++;
}
sum=sum+t;
n++;
}
cout<<"Sum="<<sum<<endl;
return 0;
}

可以运行,但是答案不对,哪里需要修改啊?
我看了标准答案,也看得懂啊,我觉得我的也是对的啊,晕啊,我是自学的,没有老师,所以请大家帮忙啊!

这是标准答案:
#include <iostream>
using namespace std;
int main ()
{float s=0,t=1;
int n;
for (n=1;n<=20;n++)
{
t=t*n; // 求n!
s=s+t; // 将各项累加
}
cout<<"1!+2!+...+20!="<<s<<endl;
return 0;
}
展开
 我来答
huifeng00
2009-10-31 · TA获得超过5233个赞
知道大有可为答主
回答量:808
采纳率:0%
帮助的人:689万
展开全部
#include <iostream>
using namespace std;
int main ()
{
float n=1,sum=0;

while (n<=20)
{
int i=1;
float t=1;
while (i<=n)
{

t=t*i;
i++;
}
sum=sum+t;
n++;
}
cout<<"Sum="<<sum<<endl;
return 0;
}
上面的程序可以出正确结果,在你的基础上改的。
你的原因是t的溢出。int i=1,t=1;
t最大4294967296-1
把它改成float t=1;
人生多问
2009-10-31 · TA获得超过443个赞
知道小有建树答主
回答量:767
采纳率:100%
帮助的人:422万
展开全部
#include <iostream>
using namespace std;
int main ()
{
float n=1,sum=0,t=1;//t会溢出
int i=1;
while (n<=20)
{
t=i=1;
while (i<=n)
{

t=t*i;
i++;
}
sum=sum+t;
n++;
}
cout<<"Sum="<<sum<<endl;
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
borisyue
2009-10-31 · TA获得超过451个赞
知道小有建树答主
回答量:223
采纳率:0%
帮助的人:224万
展开全部
你的程序数据已经溢出。那个t的值运行到10!以上的时候差不多溢出了,变成负数,导致结果不正确。如何修改?自已应该会改吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友bb8f36b
2009-10-31 · TA获得超过1402个赞
知道小有建树答主
回答量:970
采纳率:0%
帮助的人:639万
展开全部
把float改成int就可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
return_jun
2009-10-31
知道答主
回答量:35
采纳率:0%
帮助的人:0
展开全部
你的写错了,把t定义成float型。不然会丢失精度的。最后累加就发现小了很多。其实你的算法没有错,但是效率太低了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式