计蒜课_二分法求平方根

#include<iostream>
using std::endl;
using std::cout;
using std::cin;
inline bool isRes(long x,long y){//判断 x是否为y的平方根;
    return (x*x==y)||((x*x<y)&&((x+1)*(x+1)>y));
}
int sqrt(long x){
        long lit=0;
        long big=x;
        long mid=(big+lit)/2;//mid<big&&mid>=lit;
        //每次循环开始之前保证,结果在[lit,big]中;
        while(lit<=big){
            //防止上界下界都无法改变,如(x==1),而造成的死循环;
            if(isRes(lit,x))
               return lit;
            lit++;//修改下界;

             //修改上下界;
            mid=(lit+big)/2;
            (mid*mid<x)?lit=mid:big=mid;
        }
}
int main(){
    int x;
    while(cin>>x){
        cout<<sqrt(x)<<endl;
    }
}