Mpencil 发表于 2020-12-14 18:36

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;
}

现在程序跑不出来不知道哪的问题,调试的时候看了每一项的值都是没问题的

EzGDNull 发表于 2020-12-15 23:02

#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;
}

Mpencil 发表于 2020-12-17 22:21

EzGDNull 发表于 2020-12-15 23:02
#include
#include
#include


我想我应该明白了,我明天再好好看看,谢谢你:lol:lol
页: [1]
查看完整版本: C++级数求和程序问题