x 的平方根(二分法C语言实现)

题目

实现 int sqrt(int x) 函数。

计算并返回 x 的平方根,其中 x 是非负整数。

由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。

示例 1:

输入: 4
输出: 2
示例 2:

输入: 8
输出: 2
说明: 8 的平方根是 2.82842…,
由于返回类型是整数,小数部分将被舍去。

思路

首先设定左右边界,取左右边界平均值进行平方,检验是否和目标值x相等,如果大于目标值,右边界right=med-1.如果小于目标值,左边界left=med+1.如果当循环结束时,没有找到x的平方根,说明x的平方根为小数。这时left>right,计算right的平方是否小于x、left的平方是否大于x,若满足这两个条件,返回left、right中较小的那个。

代码

int mySqrt(int x) {
    long int left=0;
    long int right=x;
    while(left<=right){
        int med=(left+right)/2;
        if(pow(med,2)>x){
            right=med-1;
        }else if(pow(med,2)x && pow(right,2)

复杂度分析

x 的平方根(二分法C语言实现)_第1张图片

你可能感兴趣的:(C语言算法)