zoukankan      html  css  js  c++  java
  • X的平方

    题目描述:

    实现 int sqrt(int x) 函数,计算并返回 x 的平方根。

    样例

    sqrt(3) = 1

    sqrt(4) = 2

    sqrt(5) = 2

    sqrt(10) = 3

    题解:

    解法1:

    /// 解法1: O(sqrt(n))
    class Solution {
    public:
        /**
         * @param x: An integer
         * @return: The sqrt of x
         */
        int sqrt(int x) {
            // write your code here
            for (int i=0; i*i<=x; ++i) {
                long long temp = (long long)(i+1)*(i+1);
                if (temp > x) {
                    return i;
                }
            }
        }
    };
    

    解法2:

    二分

    ///解法2: O(log(n))
    
    class Solution {
    public:
        /**
         * @param x: An integer
         * @return: The sqrt of x
         */
        int sqrt(int x) {
            // write your code her
            int l = 1;
            int r = x / 2 + 1; //  ans >= 1 && ans <= x/2 + 1
            while(l <= r) {
                long long mid = (l + r) / 2;
                long long t1 = mid * mid;
                long long t2 = (mid + 1) * (mid + 1);
                if (t1 == x || (t1 < x && t2 > x)) return mid;
                if (t1 < x) {
                    l = mid + 1;
                }else r = mid - 1;
            }
        }
    };
    

    解法3:

    牛顿迭代法

    ///解法3: 牛顿迭代法
    /* f(x) = n - x * x
     * Xi+1 = Xi - f(Xi)/f'(Xi)
     * Xi+1 = Xi - (n - Xi*Xi)/(-2*Xi)
     * Xi+1 = (Xi + n / Xi) / 2
     */
    
    class Solution {
    public:
        /**
         * @param x: An integer
         * @return: The sqrt of x
         */
        int sqrt(int x) {
             write your code her
            if (x == 0) return 0;
            double l = 0;
            double r = 1;
            while(l != r) {
                double t = r;
                l = (r + x*1.0 / r) / 2.0;
                r = l;
                l = t;
            }
            return (int) l;
        }
    };
    

    参考链接:

    https://zh.wikipedia.org/wiki/%E7%89%9B%E9%A1%BF%E6%B3%95

    http://www.cnblogs.com/AnnieKim/archive/2013/04/18/3028607.html

  • 相关阅读:
    文件加密二进制版本
    文件复制二进制版
    C语言里的文件函数
    文件加密2——基础版(限文本)
    文件加密——可执行,较复杂的抽取(限文本)
    typedef的使用3——使用经过typedef定义的函数构成的函数数组
    typedef的使用2——定义函数
    typedef的使用1——引入
    C语言枚举
    HanLP极致简繁转换详细讲解
  • 原文地址:https://www.cnblogs.com/icode-girl/p/6350196.html
Copyright © 2011-2022 走看看