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


#二分查找逼近while1roundabsendbegin100midroundbeginend21valmid3ifvalgtnum##华为##华为笔试##算法工程师#
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-10 13:54
点赞 评论 收藏
分享
今天 14:10
门头沟学院 Java
点赞 评论 收藏
分享
07-01 13:37
门头沟学院 Java
steelhead:不是你的问题,这是社会的问题。
点赞 评论 收藏
分享
06-28 22:48
已编辑
广东金融学院 Java
小浪_Coding:学院本+这俩项目不是buff叠满了嘛
点赞 评论 收藏
分享
评论
2
4
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务