C++级数求和程序问题
程序实现是:对运行中输入的x,计算级数:1+x-x^2/2!+x^3/3!-......(-1)^n+1*x^n/n! ,要求输出精度为10^-8.#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
int main()
{
double sum=1,sum2=1,denom=1;
//sum 用于级数总的求和将第一项1给sum,sum2代表第n项
int numer;
//代表分子
cin>>numer;
double a=numer;
int c=1;
for(int i=1;fabs(sum2)>1e-8;++i)
{
c*=i;
//累计分母阶乘和
denom=c;
//将分母的值拿到
sum2=double(numer)/denom;
//每一项的值
numer*=-a;
//累计分子的次方值,和控制正负
sum+=sum2;
//每一项加起来
}
cout << fixed<<setprecision(8)<<sum<< endl;
return 0;
}
现在程序跑不出来不知道哪的问题,调试的时候看了每一项的值都是没问题的 #include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
int main()
{
double sum=1,sum2=1,denom=1;
//sum 用于级数总的求和将第一项1给sum,sum2代表第n项
int numer;
//代表分子
cin>>numer;
double a=numer;
//int c=1;////////这个变量
long long c = 1;
for(int i=1;fabs(sum2)>1e-8;++i)
{
c*=i;//主要是这里的问题,如果c变量定义为int类型,如果输入是3,也就会算19的阶乘,这个数值会溢出;如果定义为long long,暂时可以防止溢出,但是输入数值较大时,也有可能溢出的风险
//累计分母阶乘和
denom=c;
//将分母的值拿到
sum2=double(numer)/denom;
//每一项的值
numer*=-a;
//累计分子的次方值,和控制正负
sum+=sum2;
//每一项加起来
}
cout << fixed<<setprecision(8)<<sum<< endl;
return 0;
} EzGDNull 发表于 2020-12-15 23:02
#include
#include
#include
我想我应该明白了,我明天再好好看看,谢谢你:lol:lol
页:
[1]