一个测试点一直不通过
求幂级数展开的部分和
已知函数e的x次方可以展开为幂级数1+x+x 2 /2!+x 3 /3!+⋯+x k /k!+⋯。现给定一个实数x,要求利用此幂级数部分和求e的x次方的近似值,求和一直继续到最后一项的绝对值小于0.00001。
输入格式: 输入在一行中给出一个实数x∈。
输出格式: 在一行中输出满足条件的幂级数部分和,保留小数点后四位。
输入样例:
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={0};
double eps=0.00001;
scanf("%lf",&x);
if(x>=0&&x<=5){
for(i=1;i<=9;i++){
a=pow(x,i);
}
while(fabs(item)>eps){
for(j=1;j<=k;j++){
s1=s1*j;
}
item=a/s1;
s=s+item;
k++;
s1=1.0;
}
printf("%.4lf",s);
}
return 0;
}
结果貌似没有问题,但是有一个测试点一直不通过,求大佬给看看哪里有问题?是while的执行条件控制有问题还是理解什么的有问题?QAQ 你的数学公式写的好丑。看不懂。可以写在纸上拍照片发过来吗?或者换一种方式表达。 召唤风云 发表于 2020-2-6 19:08
你的数学公式写的好丑。看不懂。可以写在纸上拍照片发过来吗?或者换一种方式表达。
你的N设置小了。因为k超过了9.导致while语句里面a溢出了。将N修改成20,并将for(i=1;i<=9;i++){ 修改成for(i=1;i<N;i++){。程序可以稳定运行,测试通过 修改后的代码
#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={0};
double eps=0.00001;
scanf("%lf",&x);
if(x>=0&&x<=5){
for(i=1;i<N;i++){
a=pow(x,i);
}
while(fabs(item)>eps){
for(j=1;j<=k;j++){
s1=s1*j;
}
item=a/s1;
s=s+item;
k++;
s1=1.0;
}
printf("%.4lf",s);
}
return 0;
} alexw_h264 发表于 2020-2-9 10:07
你的N设置小了。因为k超过了9.导致while语句里面a溢出了。将N修改成20,并将for(i=1;i
嗯嗯是溢出了,20也有点小,至少22。我还有一个疑问,就是N=25,27这样的奇数所有测试点就会出现运行时错误的情况。。。N如果设置为22,24,30的偶数,测试就通过了请问是为什么呀? 如果你的输入是1.2的话,k会到11,不会超过20的。
22对应的是哪个输入?另外,N=25等出错时,对应的是什么输入? alexw_h264 发表于 2020-2-9 21:02
如果你的输入是1.2的话,k会到11,不会超过20的。
22对应的是哪个输入?另外,N=25等出错时,对应的是什 ...
刚试了下本地运行,Dev上N=20其实足够了。但是在OJ上不知道为什么就是过不了,估计是OJ评定标准不一样啥的。。。谢谢啦
页:
[1]