POJ2109+二分

这道题主要注意精度问题就行。
还有就是二分的时候,left=mid+1或者left=mid;都行。
不过个人更喜欢mid+1。
View Code
 1 #include<cstdio>

 2 #include<cstring>

 3 #include<cmath>

 4 #define eps 0.0000000001

 5 using namespace std;

 6 double n,p;

 7 void solve(){

 8     long long right,left,mid;

 9     double tmp;

10     left=0;

11     right=1000000002;

12     while(left<=right){

13         mid=(left+right)/2;

14         tmp=pow(mid,n);

15         if(tmp==p){

16             printf("%lld\n",mid);

17             return ;

18         }

19         else

20             if(tmp>p)

21                 right=mid;

22             else

23                 left=mid+1;

24     }

25     return ;

26 }

27 

28 int main(){

29 

30     while(scanf("%lf%lf",&n,&p)!=EOF)

31     solve();

32     //printf("%.0lf\n",ans);

33     return 0;

34 }

你可能感兴趣的:(poj)