题目描述:
给出一个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; }