二的幂次方(递归)

描述 Description   

        任何一个正整数都可以用2的幂次方表示。例如:

    137=2^7+2^3+2^0    

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

     由此可知,137可表示为:

       2(7)+2(3)+2(0)

  进一步:7= 2^2+2+2^0   (21用2表示)

       3=2+2^0  

  所以最后137可表示为:

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

     又如:

       1315=2^10 +2^8 +2^5 +2+2^0

  所以1315最后可表示为:

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

  输入:正整数(n≤20000)

输出:符合约定的n的0,2表示(在表示中不能有空格)

输入格式 Input Format

        一个正整数

输出格式 Output Format      

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

样例输入 Sample Input

73

样例输出 Sample Output      

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

递归操作题,个人感觉很是麻烦,关键还是在于对递归的理解程度。

代码:

#include <iostream>

#include <iomanip>

#include <cmath>

#include <cstdio>

#include <cstring>

#include <ctime>

#include <algorithm>

using namespace std;

int n;

void pl(int n)

{

          if(n==1) {cout<<"2(0)";return;}

          else if(n==2) {cout<<'2';return;}

          else

          {

                   int i=0,j=1;//以下操作,n为类似循环的边界的存在,当j比n大的时候开始/=2,只要n-j!=0就每次都输出加号,返回n-j;一直到j!=n时结束递归,其中对于i的递归为局部递归,为局部判定

                   while(1)

                   {

                            j*=2;

                            if(j>n)

                            {

                                      j/=2;

                                      if(i==1)

                                               cout<<'2';

                                      else

                                      {

                                               cout<<"2(";

                                               pl(i);

                                               cout<<')';

                                      }

                                      if(n-j!=0)

                                      {

                                               cout<<'+';

                                               pl(n-j);

                                      }

                                      return;

                            }

                            else

                                      i++;

                   }

          }

}

int main()

{

          cin>>n;

          pl(n);

          return 0;

}

posted @ 2017-10-06 17:49  YuWenjue  阅读(1029)  评论(0编辑  收藏  举报