题意:求一个32位整数n写成整数幂的形式,指数最大是多少。
分析:首先结果不超过32。从大到小枚举即可。用pow函数,pow函数可以开方,例如求n开i次方,可以改为求n的1/i次幂。一定要写精度,否则wa


#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
usingnamespace std;
#define eps 1.0e-12
longlong n;
void work()
{
bool fu =false;
if (n <0)
{
fu =true;
n =-n;
}
for (int i =32; i >=1; i--)
if (!fu || (fu && (i &1)))
{
double a = pow(double(n), 1.0/ i);
longlong x = a;
if (abs(a - x) < eps || abs(a - x -1) < eps)
{
printf("%d\n", i);
return;
}
}
}
int main()
{
//freopen("t.txt", "r", stdin);
while (scanf("%lld", &n), n)
work();
return0;
}