计蒜课_二分法求平方根
Posted 欢迎来到我的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计蒜课_二分法求平方根相关的知识,希望对你有一定的参考价值。
教训:代码一直通不过的也许因为数据类型(在本题中int改为long),而不是逻辑问题;
代码如下:
1 #include<iostream> 2 using std::endl; 3 using std::cout; 4 using std::cin; 5 inline bool isRes(long x,long y){//判断 x是否为y的平方根; 6 return (x*x==y)||((x*x<y)&&((x+1)*(x+1)>y)); 7 } 8 int sqrt(long x){ 9 long lit=0; 10 long big=x; 11 long mid=(big+lit)/2;//mid<big&&mid>=lit; 12 //每次循环开始之前保证,结果在[lit,big]中; 13 while(lit<=big){ 14 //防止上界下界都无法改变,如(x==1),而造成的死循环; 15 if(isRes(lit,x)) 16 return lit; 17 lit++;//修改下界; 18 19 //修改上下界; 20 mid=(lit+big)/2; 21 (mid*mid<x)?lit=mid:big=mid; 22 } 23 } 24 int main(){ 25 int x; 26 while(cin>>x){ 27 cout<<sqrt(x)<<endl; 28 } 29 }
代码就不解释了,注释应该就够了
以上是关于计蒜课_二分法求平方根的主要内容,如果未能解决你的问题,请参考以下文章