码迷,mamicode.com
首页 > 其他好文 > 详细

计蒜课_二分法求平方根

时间:2017-04-30 22:58:28      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:while   问题   数据类型   二分法   sqrt   blog   死循环   inline   逻辑   

教训:代码一直通不过的也许因为数据类型(在本题中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 }                                                

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

计蒜课_二分法求平方根

标签:while   问题   数据类型   二分法   sqrt   blog   死循环   inline   逻辑   

原文地址:http://www.cnblogs.com/lif323/p/6790532.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!