nyoj773开放数

来源:互联网 发布:java时间加减 小时 编辑:程序博客网 时间:2024/06/05 02:55

开方数

时间限制: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 163 277 43571861840213822045440 0
样例输出
431234
代码:
#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;}
0 0
原创粉丝点击