x的平方根

x的平方根

一、题目描述

给一个非负整数x。计算并返回x的平方根。返回结果是整数,结果只保留整数部分,小数部分被舍去。
注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。

二、题目分析

将x开平方并保留整数返回。k*k= x,求k。

三、解题思路

方法一
可以通过数学的方法!

代码实现:

public int mySqrt(int x) {
        if (x == 0) {
            return 0;
        }
        int ans = (int) Math.exp(0.5 * Math.log(x));
        return (long) (ans + 1) * (ans + 1) <= x ? ans + 1 : ans;
    }

方法二
通过二分法查找到k,找到中间值。mid = l + (n-l)/2而不用(l+n)/2是为了防止x=1时。
代码实现:

public int mySqrt(int x) {

        int l=0;
        int n=x;
        int ans = -1;

        while(l<=n){
            int mid = l+(n-l)/2;

            if((long) mid * mid > x ){
                n = mid-1;
            }else{
                l = mid+1;
                ans = mid;
            }  
        }
        return ans;
    }
posted @ 2022-09-09 22:50  z_coding  阅读(87)  评论(0)    收藏  举报