poj1730

来源:互联网 发布:深圳蛇口招商网络 编辑:程序博客网 时间:2024/05/23 19:16

//刚开始忘了考虑 testNum的正负号问题(负数的哪有次方啊),

#include<stdio.h>
#include<math.h>
#define minNum 1e-12
int main()
{
    long long testNum;
    int step;
    double ans,minTestNum,maxTestNum;
    while(scanf("%lld",&testNum),testNum)
    {
        if(testNum>0)
            for(step=32; step>0; step--)
            {
                ans=pow(testNum*1.0,1.0/step);
                minTestNum=floor(ans);
                maxTestNum=ceil(ans);
                if(fabs(minTestNum-ans)<minNum||fabs(maxTestNum-ans)<minNum)
                {
                    printf("%d\n",step);
                    break;
                }
            }
        else
        {
            testNum=-testNum;
            for(step=31; step>0; step-=2)
            {
                ans=pow(testNum*1.0,1.0/step);
                minTestNum=floor(ans);
                maxTestNum=ceil(ans);
                if(fabs(minTestNum-ans)<minNum||fabs(maxTestNum-ans)<minNum)
                {
                    printf("%d\n",step);
                    break;
                }
            }
        }
    }
    return 0;
}