P1010-幂次方

题目传送门

点我

题目思路

分治解

AC代码

#include <iostream>
#include <math.h>

using namespace std;

int last = 0;

void fz(int n)
{
    for (int i = 14; i >= 0; i--)
    {
        if (n & (1 << i))
        {
            if (i > 2)
            {
                cout << "2(";
                fz(i);
                cout << ")";
            }
            else if (i == 2)
                cout << "2(2)";
            else if (i == 1)
                cout << "2";
            else if (i == 0)
                cout << "2(0)";
            if (n > pow(2, i) && i != 0)
                cout << "+";
            n -= pow(2, i);
        }
    }
}

int main()
{
    int n;
    cin >> n;
    // max 2^15 = 32768 20000
    fz(n);
    return 0;
}