题解 | #求平方根#
求平方根
https://www.nowcoder.com/practice/09fbfb16140b40499951f55113f2166c
简单来说这题就是二分的另一种形式
难点在答案取的范围因为数据可能有1000~-1000
还会有0.001这种,所以二分答案的时候一定要从头到尾,不能想当然的从a开始
当a=0.001时,答案是0.01大于a了所以一直出错
当a=0.001时,答案是0.01大于a了所以一直出错
bool check(double s,double ans){ if(ans>s*s*s){ return true; } else { return false; } } int main() { int n,i,j,f=0; double a,l,r; cin>>a; if(a<0) l=0,f=1,a=abs(a); l=-1000,r=1000; //难点在答案取的范围因为数据可能有1000~-1000 while(l+1e-7<r){ //还会有0.001这种,所以二分答案的时候一定要从头到尾,不能想当然的从a开始 double mid=(l+r)/2; //当a=0.001时,答案是0.01大于a了所以一直出错 if(check(mid,a)){ l=mid; } else { r=mid; } } if(f==1) printf("-%.6lf",l); else printf("%.6lf",l); }