请大家帮忙看下这道简单的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;
} 展开
这是我写的程序:
#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;
} 展开
展开全部
#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;
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;
展开全部
#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;
}
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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的程序数据已经溢出。那个t的值运行到10!以上的时候差不多溢出了,变成负数,导致结果不正确。如何修改?自已应该会改吧。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把float改成int就可以了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的写错了,把t定义成float型。不然会丢失精度的。最后累加就发现小了很多。其实你的算法没有错,但是效率太低了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询