本题坑之多实在是令人发指啊。。是我目前做过的坑最多的,随便列几个吧,n可以是负数,pow函数计算后的结果需要floor之后才能与n比较,否则错错错!!!,别以为pow传两个整数进去计算出来就是整数,反正有精度差不会完全相等,还有n不能声音为int,因为测试数据有-2147483648这种变态数据用int是表现不了的!!,必须用long,还有如果n等于这个值的话,-n并不会把它变为正数,具体原因自己搜去吧。。反正就是各种错,推荐提交之前去把原题的测试数据搜来填进去全部对比一遍。。我中间的一次就是所有数据都对了有一个测试数据对不上。。硬搞了半天。。不多说了,都是泪
#include<stdio.h>
#include<math.h>
int main()
{
long n;
while (scanf("%ld", &n), n)
{
int r = 1;
int power = 2;
double temp;
while ((temp = pow(fabs(n), 1.0 / power)) >= 2)
{
int begin = (int) temp;
int i;
for (i = begin; i <= begin + 1; i++)
{
if (n > 0 && pow(i, power) == n)
r = power;
if (n < 0 && power % 2 == 1 && floor(pow(-i, power)) == n)
r = power;
}
power++;
}
printf("%d\n", r);
}
return 0;
}