求助大佬~~ 代码是凑出来的答案
#include <iostream>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <string>
#include <algorithm>
using namespace std;
int binary[1000];
int exp1[16];
int exp_2[16];
int exp_3[16];
void clean(int arr[]){
for(int i = 0;i < 1000;i++){
arr[i] = 0;
}
}
int to_binary(int n, int arr[]){
clean(arr);
int cnt = 0;
if(n == 0) arr[0] = 0;
while(n != 0){
arr[cnt++]= (n % 2);
n /= 2;
}
return cnt;
}
string return_str(int n){
if(n == 0)
return "2(0)";
else if(n == 1)
return "2";
else if(n == 2)
return "2(2)";
else if(n == 3)
return "2(2+2(0))";
else if(n == 4)
return "2(2(2))";
}
//2(2(2(2) + 2(0))
int main(void){
int n, len;
cin >> n;
len = to_binary(n, binary);
int cnt = 0;
for(int i = len - 1;i >= 0;i--){
if(binary[i] == 1){
exp1[cnt++] = i;
}
}
for(int i = 0;i < cnt;i++){
if(exp1[i] > 4)
cout << "2" << '(';
if(exp1[i] == 0 || exp1[i] == 1 || exp1[i] == 2 || exp1[i] == 3 || exp1[i] == 4){
cout << return_str(exp1[i]);
}
else{
int len2 = to_binary(exp1[i], exp_2);
int cntexp = 0;
for(int j = len2 - 1;j >= 0;j--){
if(exp_2[j] == 1){
exp_3[cntexp++] = j;
}
}
for(int j = 0; j < cntexp;j++){
cout << return_str(exp_3[j]);
if(j != cntexp - 1)
cout << '+';
}
}
if(i != cnt - 1 && exp1[i] > 4){
cout << ')' << '+';
}
else if(i != cnt - 1){
cout << '+';
}
}
return 0;
}