代码

方法1:袖珍计算器算法,使用其他数学公式
x=x12=(elnx)12=e12lnx\sqrt{x}=x^{\frac{1}{2}}=(e^{lnx})^{\frac{1}{2}}=e^{\frac{1}{2}lnx}x​=x21​=(elnx)21​=e21​lnx

方法3:牛顿迭代法泰勒级数展开逼近真解,y=x^2-C,C代表待求x,逼近真解

package com.xcrj;/*** 剑指 Offer II 072. 求平方根* - 给定一个非负整数 x ,计算并返回 x 的平方根,即实现int sqrt(int x)函数。* - 正数的平方根有两个,只输出其中的正数平方根。* - 如果平方根不是整数,输出只保留整数的部分,小数部分将被舍去。*/
public class Solution72 {/*** 袖珍计算器算法* 使用其他数学公式(使用语言内置的函数,计算速度快)*/public int mySqrt1(int x) {if (0 == x) return 0;/***  Math.log(x)的base是e*  (int):获取结果的整数部分*  浮点数的计算结果存在误差,取整之后,错误结果+1=正确结果*  例如,x=2147395600,r错误=46339,r正确结果=46340*/int r = (int) Math.exp(0.5 * Math.log(x));/*** 若r是正确答案则(r+1)*(r+1)>x* 若r是错误答案则r+1 todo* long:防止相乘越界*/return (long) (r + 1) * (r + 1) > x ? r : r + 1;}/*** 二分查找k^2仅小于x的k*/public int mySqrt2(int x) {if (0 == x) return 0;int l = 0, r = x, o = -1;// l=r,因为r=xwhile (l <= r) {int mid = ((r - l) >> 1) + l;// 找仅小于x的k,小于则往右侧靠拢逼近xif ((long) mid * mid <= x) {o = mid;l = mid + 1;}// 找仅小于x的k,大于则往左侧靠拢逼近xelse {// mid*mid<=x 已经跟x比较过了r = mid - 1;}}return o;}/*** 牛顿迭代法 浮点* - 本质是借助泰勒级数,从初始值开始快速向零点逼近,向真解逼近* <p>* 过程* - 构建函数,y=x^2-C,C代表待求x* - 初始点x0,x0=输入x。这种构建可以获取正数解* - 构建点x1,由y在x0处的斜率k0和y上的点(x0,y0)构成的直线与x轴的交点得到x1* -- 构建点x2,由y在x1处的斜率k1和y上的点(x1,y1)构成的直线与x轴的交点得到x2* -- 构建点xi,...* --- 根据直线与x轴交点求的xi=0.5 * (x_(i-1) + C / x_(i-1))* - 靠近程度:xi不停的靠近真解,直到x_(i-1)和xi的差值小于1e-7* -- 在xi不停靠近真解的过程中,x_(i-1)和xi之间的差值越来越小。因为y函数越来越平坦*/public int mySqrt3(int x) {if (0 == x) return 0;// C代表待求xdouble C = x;// 初始点x0,x0=输入x。这种构建可以获取正数解double x0 = x;// xpre=x_(i-1)代表前一个解double xpre = x0;while (true) {// 根据直线与x轴交点求的xidouble xi = 0.5 * (xpre + C / xpre);// 在xi不停靠近真解的过程中,x_(i-1)和xi之间的差值越来越小。因为y函数越来越平坦if (Math.abs(xi - xpre) < 1e-7) {return (int) xi;}xpre = xi;}}/*** 牛顿迭代法 整数*/public int mySqrt4(int x) {if (0 == x) return 0;// C代表待求xint C = x;// 初始点x0,x0=输入x。这种构建可以获取正数解int x0 = x;// xpre=x_(i-1)代表前一个解long xpre = x0;while (true) {// 根据直线与x轴交点求的xilong xi = (xpre + C / xpre) / 2;// 在xi不停靠近真解的过程中,xi * xi逐渐靠近xif (xi * xi <= x) {return (int) xi;}xpre = xi;}}
}

参考

作者:LeetCode-Solution
链接:https://leetcode.cn/problems/jJ0w9p/solution/qiu-ping-fang-gen-by-leetcode-solution-ybnw/
来源:力扣(LeetCode)

leetcode/求平方根相关推荐

  1. 用python实现二分法求平方根_二分法求平方根(Python实现)

    使用二分法(Bisection Method)求平方根. def sqrtBI(x, epsilon): assert x>0, 'X must be non-nagtive, not ' + ...

  2. 利用牛顿法求平方根-Go语言实现

    牛顿法解释 百度的解释如下: 通俗的解释就是:多数方程不存在求根公式,牛顿提出了一种用迭代来求方程近似根的方法.思路就是不断取切线,用线性方程的根逼近非线性方程f(x)=0f(x)=0f(x)=0的根 ...

  3. python二分法求解_Python使用二分法求平方根的简单示例

    这篇文章主要为大家详细介绍了Python使用二分法求平方根的简单示例,具有一定的参考价值,可以用来参考一下. 对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! 使 ...

  4. ACMNO.16用迭代法求 。求平方根的迭代公式为: X[n+1]=1/2(X[n]+a/X[n]) 要求前后两次求出的得差的绝对值少于0.00001。 输出保留3位小数 输入 X 输出 X的

    题目描述 用迭代法求 . 求平方根的迭代公式为: X[n+1]=1/2(X[n]+a/X[n]) 要求前后两次求出的得差的绝对值少于0.00001.输出保留3位小数 输入 X 输出 X的平方根 样例输 ...

  5. 不用库函数求平方根!

    1. 这里有好多种方法~ :http://www.codeproject.com/KB/cpp/Sqrt_Prec_VS_Speed.aspx 2. 一个用神奇的数 - 0x5f3759df 来求平方 ...

  6. note 5 二分法求平方根,素数,回文数

    +二分法求平方根 x = float(raw_input('Enter the number')) low = 0 high = x guess = (low + high ) / 2 if x &l ...

  7. 141. Sqrt(x)【牛顿迭代法求平方根 by java】

    Description Implement int sqrt(int x). Compute and return the square root of x. Example sqrt(3) = 1 ...

  8. 经典算法:牛顿迭代法求平方根

    //牛顿迭代法求平方根 1 double mysqrt(double num) 2 { 3 double x = num/2; 4 double y = 0; 5 do{ 6 x = x/2+num/ ...

  9. c语言迭代法求平方根_求平方根问题 (C++ 实现)

    下面是用二分法和牛顿迭代法求一个正数的平方根. 二分法 这里的题目稍微宽了一点点,包含了整数和小数的情况,这里二分法就不用多说了,如果中间值的平方与目标值在误差范围内,则返回,否则根据大小情况改变左/ ...

最新文章

  1. JAVA产生加密公钥私钥_Java生成非对称型加密的公钥和私钥
  2. MySQL实时复制成为可能?
  3. dede php 循环,织梦怎么循环调用多级子栏目如二级栏目下三级栏目
  4. Codeforces 1276D/1259G Tree Elimination (树形DP)
  5. java vtd-xml_在java中使用vtd-xml获取xml中的属性文本
  6. 什么是长期存储在计算机外存上的有结构,数据库是长期存储在计算机主存内
  7. from robot.api import logger
  8. 决策者根据什么曲线做出决策_如何在开放社区中做出品牌决策
  9. Java中try catch finally语句中含有return语句的执行情况
  10. Tomcat 学习过程4
  11. 网络工程师Day10 以太网接口和链路配置
  12. SpringBoot的C2C水果商城系统
  13. MySQL可视化工具之Navicat for MySQL
  14. Xposed框架的安装包和卸载包的默认下载路径以及网站下载地址
  15. python二级真题--共十二套--前六套--选择题
  16. bat(batch)入门简介
  17. Docker+Consul+Registrator实现服务注册与发现
  18. Android 开发Usb知识
  19. 【小程序】websocket实现“谁是卧底”在线随机发牌
  20. 使用nw.js将vue项目打包为可在xp系统运行的桌面程序

热门文章

  1. 数据集-故障诊断:西储大学轴承的各项数据以及数据说明
  2. 2×24全交换开关矩阵方案
  3. 计算机网络中心防火门开启方向,防火门的开启方向怎么确定?
  4. (转)C# 获取汉字的拼音首字母和全拼(含源码)[A]
  5. 2019.11.13
  6. 上海基诺墙绘 中荷学生共同创作涂鸦 “We are伐木累”示好
  7. 你不知道的Word中制作表格的7个技巧
  8. Tensorflow C++接口部署python深度学习训练模型
  9. AD10 report_drc.xsl不存在解决方法
  10. Android热更新详解