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

    Implement int sqrt(int x).

    Compute and return the square root of x.


    方法相当2b

    之前判定超时, 于是用到了

    class Solution {
    public:
        int sqrt(int x) {
            if(x==0)
                return 0;
            if(x==1)
                return 1;
            int i;
            if(x<100000000)
            for(i=1;i<=x/2+1;i++)
            {
                if(i*i>x)
                    return i-1;
            }
            
            for(i=10000;i<=x/10000+1;i++)
            {
                //i*i may be overflowed
                if(i*i>x&&(i-1)*(i-1)<=x) 
                    return i-1;
                if(i*i<(i-1)*(i-1))
                    return i-1;
            }
            
        }
    };

    牛顿迭代法:

    int sqrt(int x) {
    		// Start typing your C/C++ solution below
            // DO NOT write int main() function
            if (x ==0)
                return 0;
            double pre;
            double cur = 1;
            do
            {
                pre = cur;
                cur = x / (2 * pre) + pre / 2.0;
            } while (abs(cur - pre) > 0.00001);
            return int(cur);
        }

    x^2 = n

    f(x) = x^2 - n

    经过(xi, f(xi))这个点的切线方程为f(x) = f(xi) + f’(xi)(x - xi),其中f'(x)为f(x)的导数,本题中为2x。令切线方程等于0,即可求出xi+1=xi - f(xi) / f'(xi)。

    继续化简,xi+1=xi - (xi- n) / (2xi) = xi - xi / 2 + n / (2xi) = xi / 2 + n / 2xi = (xi + n/xi) / 2。

    有了迭代公式xi+1= (xi + n/xi) / 2,程序就好写了。


    当两个点 pre和cur无限接近时, 得到结果

    每天早上叫醒你的不是闹钟,而是心中的梦~
  • 相关阅读:
    每日日报
    每日日报
    每日日报
    每日日报
    每日日报
    每日日报
    每日日报
    每日日报
    每日日报
    COM对象
  • 原文地址:https://www.cnblogs.com/vintion/p/4116969.html
Copyright © 2011-2022 走看看