zoukankan      html  css  js  c++  java
  • Sqrt(x) -- leetcode

    题目描述:
    Implement int sqrt(int x).

    Compute and return the square root of x.

    如果输入的是正整数,并且,输出int类型的话,可以用二分查找的方法。
    对于一个非负数n,它的平方根不会大于(n/2+1)。因为:
    (n/2+1)2=n+1+n2/4>n。因此只需要在[0, n/2+1]的区间内二分查找。
    代码:

    class Solution {
    public:
        int mySqrt(int x) {
            long long low = 0;
            long long high = x / 2 +1;
            long long mid = 0, p = 0;
            while(low <= high){
                mid = (low + high)/2;
                p = mid * mid;
                if (p == x) return mid;
                if (p < x) low = mid+1;
                if (p > x) high = mid-1;
            }
            return high;
        }
    };

    牛顿法:解决 double 类型的 x。

    可以将求sqrt(x)转为函数:f(x)=x2n的求解。
    牛顿迭代
    首先取x0,若x0不是此次的解,以点(x0,f(x0))f(x)的切线,与x轴交于(x1,0)然后以此类推。以这样的方式得到的xi会无限趋近于f(x)=0的解。通过判断前后两个解xixi1是否无限接近,来判断xi是否为f(x)=0的解。
    求过点(xi,f(xi))的切线方程,切线的斜率为f(xi),根据直线方程的两点式,f(x)f(xi)=f(xi)(xxi),然后令切线的f(x)=0xi+1=xif(xi)/f(xi)=xi(x2in)(2xi)=(xi+n/xi)/2
    根据迭代公式:

    #include <iostream>
    using namespace std;
    double sqrt(double);
    int main() {
        double n;
        while (cin >> n) {
            double ans = sqrt(n);
            cout << ans << endl;
        }
    
        system("pause");
        return 0;
    }
    //判断两个doule类型的值是否相等
    bool isEqual(double a, double b) {
        if (abs(a - b) > 0.000001)
            return false;
        return true;
    }
    //牛顿迭代法求解
    double sqrt(double n) {
        double last = 0.0;//保存上一次的值
        double res = 1.0;//最近一次的值,初始化
        while (!isEqual(last, res)) {//不相等,继续搜索
            last = res;//保存上一次的值
            res = (res + n / res) / 2;//x_(i+1)=(x_i + n / x_i)/2
        }
        return res;
    }

    结果

  • 相关阅读:
    蓝桥网试题 java 基础练习 特殊的数字
    蓝桥网试题 java 基础练习 杨辉三角形
    蓝桥网试题 java 基础练习 查找整数
    蓝桥网试题 java 基础练习 数列特征
    蓝桥网试题 java 基础练习 字母图形
    蓝桥网试题 java 基础练习 01字串
    蓝桥网试题 java 基础练习 回文数
    蓝桥网试题 java 基础练习 特殊回文数
    Using text search in Web page with Sikuli
    each of which 用法
  • 原文地址:https://www.cnblogs.com/xiaocai-ios/p/7779754.html
Copyright © 2011-2022 走看看