题意:输入一个数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;
}
本文介绍了一个算法问题,即确定一个给定整数作为完美幂的最大指数。通过使用C++实现,该程序能够处理正负整数,并找到使该数成为某个整数的幂的最大指数。
We say that x is a perfect square if, for some integer b, x = b
2. Similarly, x is a perfect cube if, for some integer b, x = b
3. More generally, x is a perfect pth power if, for some integer b, x = b
p. Given an integer x you are to determine the largest p such that x is a perfect p
th power.
1613

被折叠的 条评论
为什么被折叠?



