采用最土的办法<一堆if>来输出“(”和“+” ,仅限数据不大时可以使用
下面是我的完整代码:
#include<iostream>
#include<cmath>
#include<vector>
using namespace std;
int Fun(int n){
if(n==0){
return 1;
}
else{
return 2*Fun(n-1);
}
}
int bijiao(int n){ //返回2的多少次方
if(n==0){
return -1;
}
for(int i=0;i<16;i++){ //确保值大于2乘10的4次方
if(Fun(i)>n){
return i-1;
}
}
return -1;
}
int main(){
int n;
cin>>n;
int dp[15]={0};
vector<vector<int>>arr(15,vector<int>(5));
int Max=bijiao(n);
while(1){
if(Max==-1){
break;
}
n-=Fun(Max);
dp[Max]=1;
Max=bijiao(n);
}
for(int i=0;i<15;i++){
if(dp[i]==1){
int n=i;
int Max=bijiao(n);
while(1){
if(Max==-1){
break;
}
n-=Fun(Max);
arr[i][Max]=1;
Max=bijiao(n);
}
}
}
int last=14;
for(int i=14;i>=0;i--){
if(dp[i]==1){
if(i<=last){
last=i; //找到最后一位
}
}
}
for(int i=14;i>last;i--){
if(dp[i]==1){
if(i==14) cout<<"2(2(2+2(0))+2(2)+2)+";
if (i==13) cout<<"2(2(2+2(0))+2(2)+2(0))+";
if (i==12) cout<<"2(2(2+2(0))+2(2))+";
if (i==11) cout<<"2(2(2+2(0))+2+2(0))+";
if (i==10) cout<<"2(2(2+2(0))+2)+";
if (i==9) cout<<"2(2(2+2(0))+2(0)+";
if (i==8) cout<<"2(2(2+2(0)))+";
if (i==7) cout<<"2(2(2)+2+2(0))+";
if(i==6) cout<<"2(2(2)+2)+";
if(i==5) cout<<"2(2(2)+2(0))+";
if(i==4) cout<<"2(2(2))+";
if(i==3) cout<<"2(2+2(0))+";
if(i==2) cout<<"2(2)+";
if(i==1) cout<<"2+";
}
}
if(last==14&&dp[14]==1)cout<<"2(2(2+2(0))+2(2)+2)";
if(last==13&&dp[13]==1) cout<<"2(2(2+2(0))+2(2)+2(0))";
if(last==12&&dp[12]==1) cout<<"2(2(2+2(0))+2(2))";
if(last==11&&dp[11]==1) cout<<"2(2(2+2(0))+2+2(0))";
if(last==10&&dp[10]==1) cout<<"2(2(2+2(0))+2)";
if(last==9&&dp[9]==1) cout<<"2(2(2+2(0))+2(0)";
if(last==8&&dp[8]==1) cout<<"2(2(2+2(0)))";
if(last==7&&dp[7]==1) cout<<"2(2(2)+2+2(0))";
if(last==6&&dp[6]==1) cout<<"2(2(2)+2)";
if(last==5&&dp[5]==1) cout<<"2(2(2)+2(0))";
if(last==4&&dp[4]==1) cout<<"2(2(2))";
if(last==3&&dp[3]==1) cout<<"2(2+2(0))";
if(last==2&&dp[2]==1) cout<<"2(2)";
if(last==1&&dp[1]==1) cout<<"2";
if(last==0&&dp[0]==1) cout<<"2(0)";
}