思想
模板一:
#include <iostream>
using namespace std;
int main()
{
double x;
cin >> x;
double l = -x, r = x;
while(r - l > 1e-8)
{
double mid = (l + r) / 2 ;
if(mid * mid >= x ) r = mid;
else l = mid;
}
//如果题目要求保留4位小数 r - l > 1e-6
//如果题目要求保留5位小数 r - l > 1e-5
//如果题目要求保留6位小数 r - l > 1e-8
printf("%lf\n", l);
}
模板二:
#include <iostream>
using namespace std;
int main()
{
double x;
cin >> x;
double l = -x, r = x;
for(int i = 0; i < 100; i++)
{
double mid = (l + r) / 2 ;
if(mid * mid >= x ) r = mid;
else l = mid;
}
//如果题目要求保留4位小数 r - l > 1e-6
//如果题目要求保留5位小数 r - l > 1e-5
//如果题目要求保留6位小数 r - l > 1e-8
printf("%lf\n", l);
}
Tips:这里左区间l 取-x是因为怕存在bug,举个例子:比如l取0,x取0.01,而0.01开方的结果0.1却不在0~0.01之间,所以无法二分出答案.