leetcode/求平方根

article/2025/9/21 16:14:05

代码

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

方法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)


http://chatgpt.dhexx.cn/article/7cGMBdKU.shtml

相关文章

求平方根

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>求平方根</title><script type"text/javascript">window.onloadfunction(){//获取页面的元素var numdocument.getElementById("num");var …

python求平方根的代码_python求平方根

广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 方法一:使用内置模块>>> import math >>> math.pow(12, 2) # 求平方144.0 >>>math.sqrt(144) # 求平方根12.0 >>>方法二:…

解平方根算法(四种解法+层层深入+逐步简化)

专栏&#xff1a; 学习笔记 同一个问题可能存在多种不同的算法&#xff1b;不同算法的思路不同&#xff0c;在解题的效率上也有很大不同。 对于算法的设计&#xff0c;岂可不慎乎 &#xff01; ☆解平方根算法一&#xff08;趋近法&#xff09; 对于输入一个任意实数 c ,输出c …

求平方根的几种方式

求平方根的几种方式 前言一、二分法求平方根二、牛顿法求平方根三、不动点法求平方根四、更抽象的方式参考 前言 最近在看神书《SICP》&#xff0c;刚看了第一章&#xff0c;虽然有些难啃&#xff0c;但感觉确实啃得确实“香”。说不上醍醐灌顶&#xff0c;但应该也是受益匪浅了…

[从零开始学算法]求平方根

这次我们来学习一下如何求平方根。在计算机中很难有精确的求出数据的平方根的算法&#xff0c;基本都是要求一个误差可接受范围内的近似值。治理我们取误差值为1e-5。 笔者的编程语言及环境如下 编程语言&#xff1a;c编译器&#xff1a;Code Blocks系统&#xff1a; windows …

word中首字母大写问题处理

和word中的大多数显示问题相关&#xff0c;它的处理也是在文件——选项中处理&#xff0c;具体处理如图所示。

word中输入英文字母的时候,自动首字母大写,如何解决(以WPS为例)

我们在使用word编辑文档的时候&#xff0c;有的时候需要输入英文&#xff0c;但是却出现了输入一个英文&#xff0c;然后再按一下空格键&#xff0c;首字母自动变成大写的情况&#xff0c;那么现在就来学习一下如何解决这个问题 如图所示&#xff0c;输入单词&#xff0c;首字…

Word2003取消首字母大写方法

打开Word2003文档&#xff0c;编辑菜单栏的“工具”下拉列表中的“自动更正选项”&#xff0c;在弹出的“自动更正”窗口中将“句首字母大写”前面的钩取消&#xff0c;然后确定即可 提示&#xff1a;大家可以看到上图中还有表格单元格的首字母大写、英文日期第一个字母大写、更…

C语言编写取单词首字母,C语言练习之单词首字母大写

/* *Copyright(c) 2016,烟台大学计算机学院 *All rights reserved. *作 者&#xff1a;刘金石 *完成日期&#xff1a;2016年4月22日 *版本 号&#xff1a;v1.0 *问题描述&#xff1a;字符串中每个单词首字母变大写 */ #include int main() { int i; int word; char str[200]; …

word首字母不默认大写

这样在word里打一行英文时 首字母就不会默认大写 ------------------------------------------- 1. 2. 3.

word文档开头首字母取消自动检查大写

1、在word中先输入文本 2、打开菜单栏->审阅->拼写和语法 3、打开选项按钮 4、打开自动更正选项 里面可以修改文档中是否检查大写以及表格中是否检查大写。

word文档取消英文首字母大写

word文档取消英文首字母大写 这里我是用的OneNote做为演示&#xff0c;word文档是一样的操作 1、点击文件&#xff0c;再选择选项 2、进入校对&#xff0c;再选择自动更正选择 3、取消句首字母大写&#xff0c;再点击确定

【word基础】如何取消word首字母大写

转载于:https://www.cnblogs.com/xphdbky/p/7604566.html

word2016取消首字母大写 带图详细讲解

文件-->选项-->校对-->自动更正选项-->句首字母大写&#xff08;对勾去掉&#xff09; operation is over.

java首字母变大写_Java 首字母转大写

1.代码实现 /* * 首字母转大写 * attention: * date: 2020年11月17日 0017 14:51 * param: word 待转换字符串 * return: java.lang.String 首字母转成了大写 */ public static String convertInitialUpper(String word) { if (StringUtils.isEmpty(word)) return ""…

c语言将首字母变大写,c语言问题 将首字母变为大写

#include int main() { int i; int word; char str[200]; printf("请输入字符串:"); while(gets(str)!NULL) { printf("修改后的字符串为:"); word0; for(i0;str!\0;i) { if(str) { word0; printf(""); } else if(word0) { word1; strstr-32; pr…

怎么取消和设置Word中首字母大写

①打开Word文档 ②单击Word文档的“ 文件 ”选项卡&#xff08;左上角&#xff09; ③在侧栏中选择“选项” ④单机“编辑” ⑤勾选或放弃勾选就可以对其进行设置(操作完成后不要忘记点击“确定”&#xff09;

取消Word自动首字母大写步骤

前言 有时候在Word中输入英文字符时首字母会自动大写&#xff0c;但是这并不是我们想要的结果&#xff0c;本文是取消首字母大写的步骤。 第一步&#xff1a; 第二步&#xff1a; 第三步&#xff1a; 第四步&#xff1a;