(luogu1010)幂次方

将一个数拆分成二进制, 对次数递归表示, 特殊处理0和2的情况

代码:

#include <iostream>
#include <cstdio>
using namespace std;
void pow2(int n)
{
    if(n==0)
        printf("%d",n);    //特殊处理0
 else
    {
        for(int i(30);i>=0;--i)    //二进制拆分
         if(n&(1<<i))
            {
                if(i==1) cout << 2;    //特殊处理2
             else
                {
                    printf("2(");
                    pow2(i);
                    cout << ')';
                }
                n -= (1<<i);
                if(n>0)   cout << '+';
            }
    }
}
int main()
{
    int n;
    cin >> n;
    pow2(n);
    return 0;
}