今天是写题,数的的三次方根。
使用二分法,浮点数不能位运算直接/2即可。
//这道题很难想到二分,二分查找是查找,就是找哪个地方有目标数 //一般是用在区间上的, //总结:二分要求是有查找条件且是查找,符合这两个条件就可以考虑 //不过这里可以把从0到n的浮点数当成一个区间,看数值范围的话,n的话是10000^1/3<22 //查找条件是mid * mid * mid ,而且用二分的一个原因是,因为l和r总会相等,所以可以锁 //数值吧(近似的数值) #include <iostream> #include <cstring> #include <cstdio> #include <algorithm> using namespace std; const int N = 10010; double x; double fdbsearch(double l , double r ,double eps){ while(r - l > eps){ double mid = (l + r) / 2; // if(mid * mid * mid >= x) r = mid; else l = mid;//有加必有减 } return l; } int main(){ cin >> x; printf(("%lf") , fdbsearch(-22,22,1e-8)); return 0; }
补充:eps的由来是因为题目要求6位小数,也就是精度问题,一般比题目给的还要多出2位小数。
写的时候又发现我之前的代码想法有问题,也不算有问题,但还是 不显示了吧。