LeetCode69 x的平方根

题目

实现 int sqrt(int x) 函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。

示例

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

C++代码

采用牛顿迭代法。
百度百科里边的介绍:
比如136161这个数字,首先我们找到一个和136161的平方根比较接近的数,任选一个,比方说300到400间的任何一个数,这里选350,作为代表。我们先计算0.5(350+136161/350),结果为369.5。然后我们再计算0.5(369.5+136161/369.5)得到369.0003,我们发现369.5和369.0003相差无几,并且369²末尾数字为1。我们有理由断定369²=136161。
计算机肯定是不能一眼看出来最接近x的平方根是多少的,所以在这里将迭代开始的变量设置为1。通过比较前后两次迭代变量来判断是否继续迭代。
利用精度控制循环,注意设置的精度值为小数,所以变量应当设为double型。返回时再将类型强制转换为int。

class Solution {
public:
    int mySqrt(int x) 
    {
     if (x < 0) return -1; //为负数时返回-1
     if (x == 0) return 0;
     double root = 1; //迭代初始值设为1
     double temp;
     do
     {
      temp = root;
      root =(root + x / root)/2.0; 
     }while (abs(temp - root) > 0.01 ); //设置精度为0.01,不满足精度则继续循环
 return (int)root;
    }
};

猜你喜欢

转载自blog.csdn.net/Fang_D/article/details/83069048