递归思想要好好消化,先得出非零的幂,然后按幂从高到低组字符串

#include <iostream>
#include "vector"
using namespace std;
vector<int> getExponential(int n) {
    vector<int> ans;
    int exp = 0;
    while (n != 0) {
        if (n % 2 == 1) ans.push_back(exp);
        n /= 2;
        exp++;
    }
    return ans;
}
string present(int n) {
    vector<int> exps = getExponential(n);
    string ans;
    for (int i = exps.size()-1; i >=0; i--) {
        int item = exps[i];
        if (item == 0)ans += "2(0)";
        else if (item == 1) ans += "2";
        else if (item == 2) ans += "2(2)";
        else {
            ans += "2(" + present(item) + ")";
        }
        if (i != 0) ans += "+";
    }
    return ans;
}
int main() {
    int n;
    while (cin >> n) { // 注意 while 处理多个 case
        cout <<present(n) << endl;


    }
}
// 64 位输出请用 printf("%lld")