鱼C论坛

 找回密码
 立即注册
查看: 1623|回复: 6

[已解决]一个测试点一直不通过

[复制链接]
发表于 2020-2-6 17:52:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

求幂级数展开的部分和
已知函数e的x次方可以展开为幂级数1+x+x ​2 ​​/2!+x ​3 ​​/3!+⋯+x ​k ​​/k!+⋯。现给定一个实数x,要求利用此幂级数部分和求e的x次方的近似值,求和一直继续到最后一项的绝对值小于0.00001。
输入格式: 输入在一行中给出一个实数x∈[0,5]。
输出格式: 在一行中输出满足条件的幂级数部分和,保留小数点后四位。
输入样例:
1.2
输出样例:
3.3201
#include <stdio.h>
#include "math.h"
#define N 10
int main()
{
    int i=0,k=1,j;
    double s=1,s1=1.0,item=1,x;
    double a[N]={0};
    double eps=0.00001;
    scanf("%lf",&x);
    if(x>=0&&x<=5){
    for(i=1;i<=9;i++){
        a[i]=pow(x,i);
    }
    while(fabs(item)>eps){
        for(j=1;j<=k;j++){
            s1=s1*j;
        }
        item=a[k]/s1;
        s=s+item;
        k++;
        s1=1.0;

    }
    printf("%.4lf",s);
    }
    return 0;
}

结果貌似没有问题,但是有一个测试点一直不通过,求大佬给看看哪里有问题?是while的执行条件控制有问题还是理解什么的有问题?QAQ
最佳答案
2020-2-9 10:07:29
召唤风云 发表于 2020-2-6 19:08
你的数学公式写的好丑。看不懂。可以写在纸上拍照片发过来吗?或者换一种方式表达。

你的N设置小了。因为k超过了9.导致while语句里面a[k]溢出了。将N修改成20,并将for(i=1;i<=9;i++){ 修改成for(i=1;i<N;i++){。程序可以稳定运行,测试通过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-6 19:08:12 From FishC Mobile | 显示全部楼层
你的数学公式写的好丑。看不懂。可以写在纸上拍照片发过来吗?或者换一种方式表达。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-9 10:07:29 | 显示全部楼层    本楼为最佳答案   
召唤风云 发表于 2020-2-6 19:08
你的数学公式写的好丑。看不懂。可以写在纸上拍照片发过来吗?或者换一种方式表达。

你的N设置小了。因为k超过了9.导致while语句里面a[k]溢出了。将N修改成20,并将for(i=1;i<=9;i++){ 修改成for(i=1;i<N;i++){。程序可以稳定运行,测试通过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-9 10:08:03 | 显示全部楼层
修改后的代码

#include <stdio.h>
#include "math.h"
#define N 20
int main()
{
    int i=0,k=1,j;
    double s=1,s1=1.0,item=1,x;
    double a[N]={0};
    double eps=0.00001;
    scanf("%lf",&x);
    if(x>=0&&x<=5){
                for(i=1;i<N;i++){
        a[i]=pow(x,i);
    }
    while(fabs(item)>eps){
        for(j=1;j<=k;j++){
            s1=s1*j;
        }
        item=a[k]/s1;
        s=s+item;
        k++;
        s1=1.0;

    }
    printf("%.4lf",s);
    }
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-9 20:10:08 | 显示全部楼层
alexw_h264 发表于 2020-2-9 10:07
你的N设置小了。因为k超过了9.导致while语句里面a[k]溢出了。将N修改成20,并将for(i=1;i

嗯嗯是溢出了,20也有点小,至少22。我还有一个疑问,就是N=25,27这样的奇数所有测试点就会出现运行时错误的情况。。。N如果设置为22,24,30的偶数,测试就通过了请问是为什么呀?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-9 21:02:05 | 显示全部楼层
如果你的输入是1.2的话,k会到11,不会超过20的。

22对应的是哪个输入?另外,N=25等出错时,对应的是什么输入?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-9 23:14:17 | 显示全部楼层
alexw_h264 发表于 2020-2-9 21:02
如果你的输入是1.2的话,k会到11,不会超过20的。

22对应的是哪个输入?另外,N=25等出错时,对应的是什 ...

刚试了下本地运行,Dev上N=20其实足够了。但是在OJ上不知道为什么就是过不了,估计是OJ评定标准不一样啥的。。。谢谢啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 05:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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