ZOJ-2124

本题坑之多实在是令人发指啊。。是我目前做过的坑最多的,随便列几个吧,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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值