完成次数 2
一、题目
二、代码
class Solution {
public:
int mySqrt(int x) {
double left=0;
double right=x;
double middle=0;
double last_consequence=-10;
double now_consequence=-100;
int return_num=0;
while(abs(last_consequence-now_consequence)>0.00001)
{
last_consequence= now_consequence;
middle=(left+right)/2;
if(middle*middle==x) //相等直接退出
{
return_num=middle;
break;
}
if(middle*middle>x) //大于 结果必定在左边
{
right=middle;
now_consequence=abs(middle*middle-x);
return_num=middle;
}
if(middle*middle<x)
{
left=middle;
now_consequence=abs(middle*middle-x);
return_num=middle;
}
}
//如果是9 可能逼近结果是2.9911 此时向左边取整就是错误的
//其实这种情况只在整数的时候会存在,单独尝试修正一下
std::cout<<"first return num"<<return_num<<std::endl;
long long int try_num=return_num+1;
if(try_num*try_num==x) return_num=try_num;
return return_num;
}
};