zoukankan      html  css  js  c++  java
  • 简单的试炼

    【题目描述】

    已知一个数S,求X和Y,使得2^X+3^Y=S。

    【输入描述】

    输入多组数据,每行一个整数S,当S=0时输入结束。

    【输出描述】

    X和Y,以2^X+3^Y=S的形式输出。若有多组解,输出X最小的那组。

    【样例输入】

    13

    33

    0

    【样例输出】

    2^2+3^2=13

    2^5+3^0=33

    【数据范围及提示】

    对于30%的数据:S≤50,000,000,数据组数≤5000;

    对于50%的数据:S≤3,000,000,000,数据组数≤20000;

    对于80%的数据:S≤3,000,000,000,000,数据组数≤50000;

    对于100%的数据:S≤200,000,000,000,000,数据组数≤80000。

    源代码:
    
    #include<cstdio>
    double n;
    long long s;
    int num;
    bool Exam(long long t,int &num) //递归判断2^N。
    {
        if (t%2)
          return false;
        if (t==2)
          return true;
        num++;
        bool k;
        k=Exam(t/2,num);
        return k;
    }
    void Solve()
    {
        int ans1(0),ans2(0);
        for (int a=30;a>=0;a--) //枚举,3^30>200000000000000。
        {
            int k=a;
            long long number=1,x=3;
            while (k) //快速幂。
            {
                if (k&1)
                  number*=x;
                x*=x;
                k=k>>1;
            }
            num=1;
            if (s-number>0&&(s-number==1||Exam(s-number,num)))
            {
                ans1=a;
                ans2=num;
                break; //找到答案立即停止循环。
            }
        }
        n=s; //如此之恶心,实为罕见。
        printf("2^%d+3^%d=%.0lf
    ",ans2,ans1,n); //尼玛真恶心。
    }
    int main() //类型转换好恶心啊!
    {
        scanf("%lf",&n);
        s=n;
        printf("%lld",s);
        while (s)
        {
            Solve();
            scanf("%lf",&n);
            s=n;
        }
        return 0;
    }

    /*
      Windows系统下应使用"%I64d"输出Long Long类型,Linux等考试评测环境应使用"%lld",本题中进行Long Long与double的转换皆可通过。
    */
  • 相关阅读:
    013.ES6 -对象字面量增强型写法
    012. ES6
    011. ES6 语法
    10. 9. Vue 计算属性的setter和getter 以及 计算属性的缓存讲解
    4. Spring MVC 数据响应方式
    3. SpringMVC 组件解析
    9. Vue 计算属性
    【洛谷 2984】给巧克力
    【洛谷 1821】捉迷藏 Hide and Seek
    【洛谷 1821】银牛派对Silver Cow Party
  • 原文地址:https://www.cnblogs.com/Ackermann/p/5566836.html
Copyright © 2011-2022 走看看