贴原题:
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;
}