ZJU2124 Perfect Pth Powers - 简单题 pow函数

 题目描述:

给出一个int范围的整数x,求x=b^p的最大p值。

分析:

因为x在int范围内,所以p的取值是1到31。枚举一下,用pow函数对x开方,然后验证即可。

错了好几次……原因是数据可能是2^31,并且里面有负数,但是题目明明说“The value of x will have magnitude at least 2 and be within the range of a (32-bit) int in C, C++, and Java”,郁闷了……

不能太相信题目,更不能太相信自己的英语水平……

/*
ZJU2124 Perfect Pth Powers
*/

#include 
  
   
#include 
   
     #define int64 long long #define I64d "%lld" int64 POW(int b,int p){ int i; int64 s=1; for(i=0;i< p;i++) s*=b; return s; } int main() { int64 x,n; int i,y; while(scanf(I64d,&n),n){ x=n>0?n:-n; for(i=32;i>=2;i--){ y=(int)(pow((double)x,1.0/i)+0.5); if(POW(y,i)==x){ if(n<0 && i%2==0) continue; else printf("%d/n",i); break; } } if(i==1) printf("1/n"); } return 0; }
   
  

你可能感兴趣的:(ZJU2124 Perfect Pth Powers - 简单题 pow函数)