吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1298|回复: 2
收起左侧

[求助] C++级数求和程序问题

[复制链接]
Mpencil 发表于 2020-12-14 18:36
程序实现是:对运行中输入的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;
}

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

红线中t的值为9.5545多了

红线中t的值为9.5545多了

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

EzGDNull 发表于 2020-12-15 23:02
[C++] 纯文本查看 复制代码
#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;
}
微信截图_20201215225700.png
 楼主| Mpencil 发表于 2020-12-17 22:21
EzGDNull 发表于 2020-12-15 23:02
[mw_shl_code=cpp,true]#include
#include
#include

我想我应该明白了,我明天再好好看看,谢谢你
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 10:01

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表