zoukankan      html  css  js  c++  java
  • 幂次方

    【题目描述】

    任何一个正整数都可以用2的幂次方表示。例如:137=2^7+2^3+2^0

    同时约定方次用括号来表示,即a^b 可表示为:a(b)。

    由此可知,137可表示为:2(7)+2(3)+2(0)

    进一步:

    7= 2^2+2+2^0(2^1用2表示);

    3=2+2^0。

    所以最后137可表示为:2(2(2)+2+2(0))+2(2+2(0))+2(0)。2(2(2)+2+2(0))+2(2+2(0))+2(0)。

    又如:1315=2^10+2^8+2^5+2+1,

    所以1315最后可表示为:2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)

    【输入描述】

    一个正整数n(n ≤ 20000)。

    【输出描述】

    符合约定的n的0、2表示(在表示中不能有空格)。

    【输入样例】

    1315

    【输出样例】

    2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)

    源代码:
    
    #include<cstdio>
    int n,i[15]; //数组好恶心。
    void DFS(int t) //奇妙的递归。
    {
        if (t/2==1) //处理2^1的情况。
        {
              printf("2");
              if (t-2)
              {
                  printf("+");
                    DFS(t-2);
              }
        }
        else
        {
              printf("2(");
              int num=0;
            for (int a=0;a<=15;a++)
                if (i[a]>t)
                {
                num=a-1;
                break;
              }
            if (num>2)
            {
                    DFS(num);
                    printf(")"); //这一块的处理已经结束。
              }
            else
                printf("%d)",num); //这一点的处理已经结束。
            if (t-i[num])
            {
                printf("+");
                  DFS(t-i[num]);
            }
        }
    }
    int main()
    {
        scanf("%d",&n);
        i[0]=1;
        for (int a=1;a<=15;a++) //构建2次方查询表。
          i[a]=i[a-1]*2;
        DFS(n);
        return 0;
    }
  • 相关阅读:
    预防新型冠状病毒科普宣传网站
    四则运算
    结对审查
    最大子段和
    单元自动测试Junit
    浅谈过去,畅想未来
    第一次的结对编程
    代码审查
    单元测试
    junit4单元测试
  • 原文地址:https://www.cnblogs.com/Ackermann/p/5570200.html
Copyright © 2011-2022 走看看