当前位置:   article > 正文

leetcode 69. x 的平方根_leetcode 69 c++

leetcode 69 c++

实现 int sqrt(int x) 函数。

计算并返回 x 的平方根,其中 是非负整数。

由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。

示例 1:

输入: 4
输出: 2

示例 2:

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

解法一:

  1. class Solution {
  2. public:
  3. int mySqrt(int x) { //二分法
  4. int low = 0;
  5. int up = x;
  6. while(low <= up){
  7. long mid = (low + up) / 2;
  8. long s = mid * mid;
  9. if(x == s) return mid;
  10. else if(x > s) low = mid + 1;
  11. else up = mid -1;
  12. }
  13. return up;
  14. }
  15. };

注意mid和s的类型不能用int,用int的话可能会越界,会提示超出时间限制的错误。两个int相乘或者相加的结果不要再用int表示,可以考虑用long或long long。

解法二:

  1. class Solution {
  2. public:
  3. int mySqrt(int x) { //牛顿迭代法
  4. if(x == 0) return 0;
  5. double a = 0; // b和a是相邻两次迭代结果
  6. double b = 1; // 在1附近开始找,迭代逼近目标值
  7. while(abs(b-a) > 0.1) // 判断条件为abs(b-a) > 0.1
  8. {
  9. a = b;
  10. b = (b + x/b)/2.0;
  11. }
  12. return int(b); // 返回值要求为int,需强制转换
  13. }
  14. };
利用牛顿迭代法,当两次迭代结果相差不大于0.1时即返回。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/164799?site
推荐阅读
相关标签
  

闽ICP备14008679号