题解 | #求解立方根#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; }