题目如下:
实现 int sqrt(int x) 函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
示例 1:
输入: 4
输出: 2

示例 2:
输入: 8
输出: 2
说明: 8 的平方根是 2.82842…,
由于返回类型是整数,小数部分将被舍去

解题方法1

使用朴素的二分解法,即可解决问题

#include<stdio.h>
int mySqrt(int x)
{if (x < 2){return x;}int left = 1;      int right = x / 2; while (left <= right){int mid = (left + right) / 2;if (x / mid > mid){left = mid + 1;}else if (x / mid < mid){right = mid - 1;}else{return mid;}}return right;
}int main()
{printf("%d\n",mySqrt(8));printf("%d\n",mySqrt(4));printf("%d\n",mySqrt(16));return 0;
}

运行截图如下:

解题方法2

牛顿迭代法(Newton’s method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。

产生背景:
多数方程不存在求根公式,因此求精确根非常困难,甚至不可解,从而寻找方程的近似根就显得特别重要。方法使用函数 的泰勒级数的前面几项来寻找方程 的根。牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程 的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根,此时线性收敛,但是可通过一些方法变成超线性收敛。另外该方法广泛用于计算机编程中。


利用迭代算法解决问题,需要做好以下三个方面的工作:
一、确定迭代变量
在可以用迭代算法解决的问题中,至少存在一个可直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。
二、建立迭代关系式
所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式(或关系)。迭代关系式的建立是解决迭代问题的关键,通常可以使用递推或倒推的方法来完成。
三、对迭代过程进行控制
在什么时候结束迭代过程?这是编写迭代程序必须考虑的问题。不能让迭代过程无休止地执行下去。迭代过程的控制通常可分为两种情况:一种是所需的迭代次数是个确定的值,可以计算出来;另一种是所需的迭代次数无法确定。对于前一种情况,可以构建一个固定次数的循环来实现对迭代过程的控制;对于后一种情况,需要进一步分析得出可用来结束迭代过程的条件。

#include<stdio.h>int s;//定义全局变量s
double sqrts(double x)
{double res = (x + s / x) / 2;if (res == x){return x;}else{return sqrts(res);}
}int mySqrt(int x)
{s = x;if (x == 0)return 0;return ((int)(sqrts(x)));
}int main()
{printf("%d\n",mySqrt(8));printf("%d\n",mySqrt(4));printf("%d\n",mySqrt(16));return 0;
}

运行截图如下:

184-求x的平方根(两种实现方法)相关推荐

  1. matlab 求矩阵秩,求矩阵秩的两种方法及MATLAB的应用

    摘    要: 高等代数是一门逻辑思维比较强和理论知识比较深的学科, 它具有丰富的数学知识, 涉及许多重要的数学思想, 其在数学领域的应用很广泛, 如行列式.矩阵的相关计算和求解线性方程组的解方面的应 ...

  2. 刷题日记【第四篇】-笔试必刷题【Fibonacci数列+合法括号序列判断+两种排序方法+求最小公倍数】

    目录 选择题模块 1. 以下对继承的描述错误的是(A) 2. 在Java中,一个类(B) 3. 以下不是Object 类的方法的是(D) 4. Test.main() 函数执行后的输出是(D) 编程题 ...

  3. 快速排序的两种实现方法(c语言版本)

    经过调研发现,对任意无序整数数组,快速排序有两种实现方法,这里简单阐述下思路: 思路一:随意选择一个基准元,一般选择数组的起始元或末尾元,Weiss这本书上特意搞了个算法来选择基准元,--,总之就是基 ...

  4. java 贪心算法思路,贪心算法之——黑白点的匹配(两种实现方法),贪心算法...

    贪心算法之--黑白点的匹配(两种实现方法),贪心算法 一.题目 设平面上分布着n个白点和n个黑点,每个点用一对坐标(x, y)表示.一个黑点b=(xb,yb)支配一个白点w=(xw, yw)当且仅当x ...

  5. 贪心算法黑白点匹配C语言,贪心算法之——黑白点的匹配(两种实现方法)

    一.题目 设平面上分布着n个白点和n个黑点,每个点用一对坐标(x, y)表示.一个黑点b=(xb,yb)支配一个白点w=(xw, yw)当且仅当xb>=xw和yb>=yw. 若黑点b支配白 ...

  6. R语言生存分析COX回归分析实战:两种治疗方法发生肾功能损害的情况

    R语言生存分析COX回归分析实战:两种治疗方法发生肾功能损害的情况 目录

  7. mysql workbench kernelbase.dll_电脑出现kernelbase.dll错误的两种解决方法

    KernelBase.dll是Windows操作系统的重要文件,它为各种应用程序提供服务.如果电脑提示kernelbase.dll错误,这该怎么处理?大家可以用电脑自带的防火墙或者是第三方软件来进行故 ...

  8. 使用定制的NSDictionary的方法,对NSArray进行排序(附:数组排序两种常见方法)

    NSArray中存放的是NSDictionary,可以使用策略的方法对NSDictionary进行定制,增加比较的方法.然后调用NSArray的sortUsingSelector方法对数组进行排序,这 ...

  9. Ext.Ajax.request和formPanel.getForm().submit()两种提交方法的异同:

    Ext.Ajax.request和formPanel.getForm().submit()两种提交方法的异同: 1. 相同点: a) 都是使用异步提交的方式: b) 默认都是使用POST方式来提交数据 ...

最新文章

  1. Python内置函数(63)——super
  2. 面向非易失性内存的持久索引数据结构研究综述
  3. js动态改变iframe的src属性
  4. 类库、委托、is/as
  5. Google手机移动网站适配(双向注释)
  6. Intersection of Two Prisms(AOJ 1313)
  7. go srs 流媒体服务器_SRS-开源流媒体服务器
  8. 前台收银系统授权服务器未开启,佳为软件操作大全 佳为收银系统
  9. jQuery——常用API
  10. 硬件工程师物料清单BOM对比工具
  11. 【数字信号处理】划重点
  12. 创新检查技术,赋能保密监管 ,您需要一款这样的数据库内容保密检查系统!
  13. 姚舜:成年人的崩溃,“我只是想哭一下”
  14. powerdesigner16 license key过期问题
  15. Chromedriver适用谷歌浏览器的各个版本
  16. ui设计现状与意义_UI设计的现状如何?
  17. 小球间完全弹性斜碰(赋Python代码)
  18. 数据分析师8大经典问题
  19. 向服务器写入文件失败,向远程服务器写入文件
  20. OGG dblogin错误Unrecognized parameter (SOURCEDB), expected USERID.

热门文章

  1. MP3 解码器精度测试
  2. 关于RPG MAKER的一些资源
  3. 使用宝塔自动化部署docker版kms服务器
  4. JDK,JRE不同版本区别汇总
  5. IBM Eclipse简史
  6. LPL各队人员名单及新赛季前景分析(上)
  7. 快速查询百世快递物流状态,是否签收
  8. vlookup使用步骤_vlookup怎么用详细步骤(vlookup函数的使用方法是什么)
  9. 时空大数据链接数字孪生城市
  10. HMS Core Keyring携手航班管家和高铁管家,打造美好出行体验