Sqrtx

  我只能想出二分的方法,而且还不一定能写出最简洁的代码。无论刷多少遍,牛顿迭代法我都想不到,莫名有种悲哀的感觉:智力是硬伤啊。就算如此,却还要一遍遍不厌其烦地刷,这才是最悲剧的。多说无益,上代码。

  二分:

class Solution {
public:
    int sqrt(int x) {
        if(x==0||x==1)
            return x;

        int left=0;
        int right=x;
        long long mid;
        long long val;
        long long tmp;
        while(left<right){
            mid=(left+right)/2;
            val=mid*mid;
            if(val==x)
                return mid;
            else if(val<x)
                left=mid+1;
            else
                right=mid-1;
        }
        tmp=right*right;
        if(tmp>x)
            return right-1;
        else
            return right;
    }
};

  牛顿迭代法(java):

public class Solution {
    public int sqrt(int x) {  
        if(x < 0) return -1; // assert(x >= 0);  
          
        double n = x;  
        while(Math.abs(n * n - x) > 0.0001){  
            n = (n + x / n) / 2;  
        }  
        return (int)n;  
    }    
}

 

转载于:https://www.cnblogs.com/zhizhizhiyuan/p/3949358.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值