开方数
时间限制:
500 ms | 内存限制:
65535 KB
难度:
3
-
描述
-
现在给你两个数 n 和 p ,让你求出 p 的开 n 次方。
-
输入
- 每组数据包含两个数n和p。当n和p都为0时表示输入结束。(1<=n<=200,1<=p<=10^101) 输出
- 对于每个输出对用输出开方后的结果k(结果小于10^9)。 样例输入
-
2 16 3 27 7 4357186184021382204544 0 0
样例输出
-
4 3 1234
代码:
#include<stdio.h> #include<math.h> int main() { double n,p,x; while(scanf("%lf%lf",&n,&p)!=EOF) { if(n==0&&p==0) break; else { x=pow(p,1.0/n); printf("%.0lf\n",x); } } return 0; } 上面用pow居然可以 //下面这个用二分为啥不行 #include<stdio.h> #include<math.h> double p; double n; int main() { int fun(double a); double mid,r,lx; while(scanf("%lf%lf",&n,&p)!=EOF&&n&&p) { //if(n==0&&p==0) // break; // else // { //二分思想 lx=0; r=100000000; mid=(lx+r)/2; while(lx+0.1<r) { if(fun(mid)==1) { r=mid; } else { lx=mid; } mid=(lx+r)/2; } printf("%.0lf\n",lx); // } } return 0; } int fun(double a)//计算并判断 { int i; double c=1; for(i=1;i<=n;i++) { c=c*a; } if(c>=p) return 1; else return 0; }