zoukankan      html  css  js  c++  java
  • poj1730

    /*

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

    */

    题目大意:

    求最大完全平方数,一个数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 ,具体原因暂时还不知道,日后更新。

  • 相关阅读:
    python库--pandas--Series.str--字符串处理
    前端--jstree--异步加载数据
    python库--flask--创建嵌套蓝图
    Git--生成公钥和私钥并添加gitlab访问权限
    es查询--请求body
    python生成时间序列(date_range)
    golang使用组合完成伪继承
    golang interface类型的动态绑定
    ruby环境安装草稿
    openfire
  • 原文地址:https://www.cnblogs.com/SunQi-lvbu/p/6815813.html
Copyright © 2011-2022 走看看