poj1730 - Perfect Pth Powers(完全平方数)(水题)

Posted 吾之奉先

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj1730 - Perfect Pth Powers(完全平方数)(水题)相关的知识,希望对你有一定的参考价值。

/*

以前做的一道水题,再做精度控制又出了错///。。。

*/

题目大意:

求最大完全平方数,一个数b(不超过int范围),n=b^p,使得给定n,p最大;

题目给你一个数n,求p ;

解题思路:

不需要遍历b,只需要从31开始遍历p就好了。这个方法涉及到我以前过分逃避的精度控制问题:本题会使用函数pow

而pow的返回值是double转化成int 会有损失,比如4的double表示可以使4.00000000或者3.99999999999;而我们使用

强制类型转换会截取整数部分结果就可能是3,因此只需要对强制转换的数据进行+0.1操作,可以解决这问题。

具体做法见代码。

代码:

技术分享
#include<iostream>
#include <vector>
#include <algorithm>
#include <queue>
#include<set>
#include <cstdio>
#include<iterator>
#include <cmath>
using namespace std;


int main()
{
    int  a;
    while (cin>>a&&a)
    {
        if(a>0)
        {
            for (int i=31; i>=1; i--)
            {
                int x=(int )(pow(a*1.0,1.0/i)+0.1);
                int y=(int )(pow(x*1.0,1.0*i)+0.1);
                if (y==a)
                {
                    cout<<i<<endl;
                    break;
                }
            }
        }
        else
        {
            a=-a;
            for (int i=31;i>=1;i-=2)
            {
                int x=(int )(pow(a*1.0,1.0/i)+0.1);
                int y=(int )(pow(x*1.0,i*1.0)+0.1);
                if (y==a)
                {
                    cout<<i<<endl;
                    break;
                }
            }
        }
    }
}
View Code

ps:这题的n我不能设成long long ,具体原因暂时还不知道,日后更新。

以上是关于poj1730 - Perfect Pth Powers(完全平方数)(水题)的主要内容,如果未能解决你的问题,请参考以下文章

POJ - 1274 The Perfect Stall

POJ 1274 - The Perfect Stall

poj 1543 Perfect Cubes (暴搜)

POJ3398 Perfect Service

POJ 3905 Perfect Election(2-sat)

Poj-1274-The Perfect Stall-匈牙利算法