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 }
keep moving...
原文地址:https://www.cnblogs.com/xxx0624/p/2720449.html