您的位置:首页 > Web前端

poj 1730 Perfect Pth Powers

2011-07-22 22:47 316 查看
#include<iostream>
#include<math.h>
using namespace std;
#define eps 1e-2        //其他精度数也同样可以
int main()
{

int n;
while(cin>>n&&n)
{
//n有负数的可能,比如  -1073741824,正解应该是 15, (-4)^15=-1073741824
int t=n>0?1:-1;
for(int i=31;i>=1;--i)
{
double x=ceil(pow(double(n)*t,1.0/i))*t;        //向上取整
double y=floor(pow(double(n)*t,1.0/i))*t;        //向下取整
//这里如果改成double(n*t)或n*t*1.0或n*t+0.0都是 WA ,可能是在t=-1时,n*t会超int 的负数表示范围,所以在n*t前必须先将 n 转化成浮点数

if(fabs(pow(x+0.0,i+0.0)-n)<=eps||fabs(pow(y+0.0,i+0.0)-n)<=eps)
{
cout<<i<<endl;
break;
}
}
}
return 0;
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: