nyoj 开方数

时间:2025-04-28 10:36:45

开方数

时间限制: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 <iostream>
#include <cmath>
using namespace std;

int main()
{
int n;
double p;
while(cin>>n>>p)
{
if((!n)&&(!p))
return 0;
long left=0,right=1000000000;
while(left<right)
{
int mid=(left+right)/2;
if(pow(mid,n)==p)
{
cout<<mid<<endl;
break;
}
else if(pow(mid,n)<p)
left=mid;
else if(pow(mid,n)>p)
right=mid;
}
}
return 0;
}