二分解方程
解方程
http://www.nowcoder.com/questionTerminal/640199f70f834e1eaf39ee85b0d745c7
二分模板题
定义:
函数一个单调递增函数,那么直接二分
考虑到有可能没有解,那就用第二种二分解法,for循环
二分左区间为l,右区间为r
然后当时,太小了,l = mid
否则太大了,r = mid
此处针对特别毒瘤的数据,加入几何的double处理
#include <iostream> #include <cstdio> #include <cmath> #define ll long long using namespace std; const double eps = 1e-7; double a, b, c; int sgn(double d){//符号判断 if(fabs(d) < eps)return 0;//0 if(d > 0)return 1;//正数 return -1;//负数 } int dcmp(double x, double y){//数据比较 if(fabs(x - y) < eps)return 0;//相等 if(x > y)return 1;//x大 return -1;//y大 } double cal(double x){ return pow(x, a) + b * log(x) - c; } int main(){ cin >> a >> b >> c; double l = 0, r = c, mid; for(int i = 1; i <= 100; i++){ mid = (l + r) / 2; if(dcmp(cal(mid), 0) == 0)break; if(dcmp(cal(mid), 0) == -1)l = mid; else r = mid; } if(dcmp(cal(mid), 0) == 0) printf("%.14lf\n", mid); else printf("-1\n"); return 0; }