洛谷-4526 【模板】自适应辛普森法2

it2025-08-08  14

题目描述 计算积分 保留至小数点后5位。若积分发散,请输出"orz"。 输入格式 一行,包含一个实数,为a的值 输出格式 一行,积分值或orz

输入输出样例 输入 #1 2.33

输出 #1 1.51068

说明/提示 a<=50 请注意时空限制。

解释:高等数学题呗,0点可以用1e-7来近似

#include <bits/stdc++.h> double a; inline double f(double x) { return pow(x,a/x-x); //原函数 } inline double simpson(double l,double r) { //Simpson公式 double mid=(l+r)/2; return (f(l)+4*f(mid)+f(r))*(r-l)/6; } double asr(double l,double r,double eps,double ans) { double mid=(l+r)/2; double l_=simpson(l,mid),r_=simpson(mid,r); if(fabs(l_+r_-ans)<=15*eps) return l_+r_+(l_+r_-ans)/15; //确认精度 return asr(l,mid,eps/2,l_)+asr(mid,r,eps/2,r_); //精度不够则递归调用 } inline double asr(double l,double r,double eps) { return asr(l,r,eps,simpson(l,r)); } int main() { scanf("%lf",&a); if(a<0) printf("orz\n"); else printf("%.5lf\n",asr(1e-7,20,1e-7)); return 0; }
最新回复(0)