2的幂次方

2的幂次方(Noip1998)

【问题描述】

     任何一个正整数都可以用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+1

     所以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表示(在表示中不能有空格)

【输入样例】

  137

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int i,n,a[20];
void work(int m)

{
       int i;
       if(m==0)
       {
            printf("0");
             return;
       }
       if(m==1)
       {
            printf("2(0)");
             return;
       }
       if(m==2)
       {
            printf("2");
            return;
       }
       for(i=15;i>=0;--i)
         if (m-a[i]>=0)
           break;
       if(a[i]==2)
              printf("2");
       else
       {
              printf("2(");
              work(i);
              printf(")");

       }
       m-=a[i];
       while(m>0)

       {
              for(i=15;i>=0;--i)
                if (m-a[i]>=0)
                  break;
              if(a[i]==2)
                     printf("+2");
              else
              {
                     printf("+2(");
                     work(i);
                     printf(")");
              }
              m-=a[i];
       }
}
int main()

{
       freopen("power.in","r",stdin);
       freopen("power.out","w",stdout);
       scanf("%d",&n);
       a[0]=1;
       a[1]=2;
       for(i=2;i<=15;++i)//求出数据范围内2的N次方
         a[i]=a[i-1]*2;
       work(n);
       return 0;

}


 这是一道递归题,递归之前一直是玥儿的心病,看到递归就害怕,不过迈出了第一步一切就好多了,这道题在格式处理上有些麻烦,细心做就好↖(^ω^)↗


  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值