题解 | #求解立方根#C语言二分查找求解
求解立方根
https://www.nowcoder.com/practice/caf35ae421194a1090c22fe223357dca
二分查找解题思路如下:
如上图随着循环次数的增加left与right会越来越逼近,直到right-left<0.001的时候循环才会停止,故而可以求得该数的开立方。
double Mysqrt(double n){
double left=0.0,right=n,mid=(right-left)/2,a=0;
//判断输入是否为负数,取绝对值
if(n<0){
n=-n;
right=n;
}
//判断输入是否小于1,输入小于1那么二分查找的左右边界为[0,1]
if(n<1){
left=0;
right=1;
}
//二分查找的精度是0.001
while(right-left>0.001){
mid=(right+left)/2;
a=mid*mid*mid;
if(n>a){
left=mid;
}else if(n<a){
right=mid;
}else if(n==a){
return mid;
}
}
return left;
}
int main(){
double s=0,a=0.0;
scanf("%lf",&s);
a=Mysqrt(s);
if(s<0){
a=-a;
}
printf("%.1lf",a);
return 0;
}

