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的转换皆可通过。
    */
  • 相关阅读:
    C基础--指针数组
    C基础--函数指针作为函数的参数
    C基础--二重指针和数组指针
    C基础--泛型函数
    html中怎么去掉input获取焦点时候的边框
    CSS3阴影 box-shadow的使用和技巧总结
    jQuery 事件
    jquery $(document).ready() 与window.onload的区别
    JavaScript substring() 方法
    indexOf()的用法
  • 原文地址:https://www.cnblogs.com/Ackermann/p/5566836.html
Copyright © 2011-2022 走看看