题意:输入一个数x,若为0则结束。否则,我们知道这个数x必定存在相应的a,b,使得x等于a的b次方;这样的a,b有至少一对。你所要做的就是求出最大的b。
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
long long n; //int不能满足要求了...
while(scanf("%lld",&n)!=EOF)
{
if(n==0) break;
long long m;
int i;
int ans=1;
if(n<0) //n可能为为负数
{ m=-n;i=3;} //负数当然得要是某个负数的奇次幂咯
else
{ m=n;i=2;}
double eps=1e-12; //精度很重要的,不能太小
double p;
for(;i<=32;)
{
p=pow(m*1.0,1.0/i); //pow(int,int)提交报错....改为float
if(fabs(int(p+eps)-p)<eps) //x等于a的b次方,b是整数,a也要是整数哦.
ans=i;
if(n<0)
i+=2; //负数当然得要是某个负数的奇次幂咯
else
i++;
}
printf("%d\n",ans);
}
return 0;
}