完成次数 2
一、题目
二、代码
class Solution {
public:
bool isPerfectSquare(int num) {
double left=0;
double right=num;
double middle=0;
double last_consequence=-10;
double now_consequence=-100;
double return_num=0;
bool bool_return_num=0;
int cal_time=0;
int last_left=0;
int last_middle=0;
int last_right=0;
//特殊处理:
//二分逼近也要防止自身就是答案的情况
if(num==1) bool_return_num=1;
//一般情况
if(bool_return_num==0)
{
//首先二分逼近平方根
while(abs(last_consequence-now_consequence)>0.000000000001)
{
last_consequence= now_consequence;
middle=(left+right)/2;
cal_time=cal_time+1;
if(middle*middle==num) //相等直接退出
{
return_num=middle;
last_left=0;
last_middle=1;
last_right=0;
break;
}
if(middle*middle>num) //大于 结果必定在左边
{
right=middle;
now_consequence=abs(middle*middle-num);
return_num=middle;
last_left=0;
last_middle=0;
last_right=1;
}
if(middle*middle<num)
{
left=middle;
now_consequence=abs(middle*middle-num);
return_num=middle;
last_left=1;
last_middle=0;
last_right=0;
}
}
std::cout<<"last_left "<< last_left<<std::endl;
std::cout<<"last_middle "<<last_middle <<std::endl;
std::cout<<"last_right "<<last_right <<std::endl;
std::cout<<cal_time<<std::endl;
std::cout<<(int)return_num<<std::endl;
std::cout<<return_num<<std::endl;
std::cout<<return_num*return_num<<std::endl;
std::cout<<abs(return_num-(int)return_num)<<std::endl;
std::cout<<"return_num "<<return_num <<std::endl;
std::cout<<"int(return_num+0.5000001) "<<int(return_num+0.5) <<std::endl;
if(abs(return_num-int(return_num+0.5000001))<=0.001)
{
bool_return_num=1;
}
else
{
bool_return_num=0;
}
}
std::cout<<bool_return_num<<std::endl;
return bool_return_num;
}
};