题目如下: 我提交后是runtime error,但我找不出哪里出错了,请教大神指点迷津,谢谢 我的代码如下: #include<stdio.h> while(scanf(“%lf%d”,&x,&n)==2) while(1) shang=pow(x,i); for(t=1;t<=i;t++) xia=fact; sum=sum+k*(shang/xia); if(shang<0) if(shang/xia<pow(0.1,n)) printf(“%.*lf\n”,n,sum); } return 0; |
|
看不出有啥子问题
|
|
这样直接算阶乘,fact的结果会爆表吧。
注意题目说x是任意实数,那么当x很大的时候pow(x,i)就会超出double的范围了 |
|
直接算pow(x,i)/(t!)肯定会爆的。
我觉得应该分步计算,大致像是类似这样:x/(1*2*3)*x/(4*5)……但是又涉及到精度控制,我也没想好具体应该怎么做。 |
|
看来是一个数据范围的问题
|
|
这是我同学的代码,感觉我的跟他的思路差不多,但为什么他提交就对而我却是错的呢,请问我们两个的代码哪里不一样呢? #include<stdio.h> for(j=1;j<=2*i-1;j++) xiang=flag*(fenzi/fenmu); sinx=sinx+xiang; |
|
40分 |
你们两个的代码,在输入“20 9”的时候结果不一样。
我把你的这一行 sum=sum+k*(shang/xia); 改成 fact = k*(shang/xia); sum=sum+fact; 这样结果就一样了。 至于为什么,我也不知道,可能是浮点数计算的误差造成的。 |
你好,按你的改了,但提交后还是Runtime Error,按OJ返回的这个结果可能是除数为0,但个人又觉得不太可能,请问你觉得会不会有可能 |