洛谷 p1010 幂次方

#include <cstdio>
#include <cmath>
using namespace std;
void dg(int n)
{
    int a;
    if(n==0) return;
    for(int i=0;i<=15;i++)    //求出n以内2最大的a次方
    {
        a=i;
        if(pow(2,a)>n)
        {
            a--;
            break;
        }
    }
    if(a==0) printf("2(0)");
    if(a==1) printf("2");
    if(a>1)     //当a大于1时进行递归
    {
        printf("2(");
        dg(a);   //使a次方用2的幂次方表示
        printf(")");
    }
    if(n!=pow(2,a))   //使减去最大2的a次方剩下的数用2的幂次方表示
    {
        putchar('+');
        dg(n-pow(2,a));
    }
}
int main()
{
    int n;
    scanf("%d",&n);
    dg(n);
    putchar('\n');
    return 0;
}

 

posted @ 2019-09-05 21:17  痞卡皮  阅读(260)  评论(0编辑  收藏  举报