leetcode 69. Sqrt(x)(C语言,牛顿迭代法求开方问题)46

来源:互联网 发布:网络销售什么最赚钱 编辑:程序博客网 时间:2024/06/05 20:26

贴原题:

Implement int sqrt(int x).

Compute and return the square root of x.

解析:
  题目很简短,就是让写一个开方函数。
  这里我运用了牛顿跌代法。
  知乎有个帖子,里面有大神说得很通俗,这里贴出链接——
  如何通俗易懂地讲解牛顿迭代法求开方? - 知乎https://www.zhihu.com/question/20690553

  本题要注意的一点就是float精度不够用……害我纠结了半天
  
贴C代码:

int mySqrt(int x) {    if(x<0)    {        return 65535;//负数没事开什么方    }    double n=x;//这里给n赋值非零数即可    double m=0;    while(abs(m-n)>0.0000001)//精度    {        m=n;        n=(n*n+x)/(2.0*n);//迭代公式    }    return n;}

这里顺便贴一个二分法(仅作示例,本例应该可以解决65000以内简单开方):

unsigned int math_sqrt(unsigned int x){    unsigned char ans=0, p=0x80;//八位无符号数    while(p!=0)    {        ans+=p;        if(ans*ans>x)        {            ans-=p;        }        p=(unsigned char)(p/2);//二分    }    return ans;}
原创粉丝点击