蓝桥杯 算法训练 ALGO-95 2的次幂表示

#include
#include
#include
#include
using namespace std;
int n;
void dfs(int num) {
    int cnt = 0;
    int i = 0, j;
    int mi[32];
    while (num) {
        j = num % 2;
        if (j)
            mi[cnt++] = i;//i表示第cnt个底数为2的幂
        i++;
        num /= 2;
    }
    for (i = cnt-1; i >= 0; i--) {
        if (mi[i] == 0) printf("2(0)");
        else if (mi[i] == 1) printf("2");
        else if (mi[i] == 2) printf("2(2)");
        else if (mi[i] > 2) {   //幂>2还要拆分 
            printf("2(");
            dfs(mi[i]);
            printf(")"); 
        }
        if (i != 0) printf("+");
    }
}
int main() {
    cin >> n;
    dfs(n);

    return 0;
}

你可能感兴趣的:(蓝桥杯)