poj 1730 Perfect Pth Powers

#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;
}

  

posted on 2011-07-22 22:47  sysu_mjc  阅读(130)  评论(0编辑  收藏  举报

导航