计蒜课_二分法求平方根

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 }                                                

代码就不解释了,注释应该就够了

以上是关于计蒜课_二分法求平方根的主要内容,如果未能解决你的问题,请参考以下文章

计蒜课_加一

计蒜课 16957 拓扑排序

计蒜课/百度的年会游戏(枚举)

计蒜课/UCloud 的安全秘钥(hash)

如何用二分法求平方根???

计蒜课数据结构栈的复习