1998年NOIP普及组题目,一个比较简单的递归,特判输入为1的情况即可
AC代码:
#include<bits/stdc++.h>
using namespace std;
void f(int x){
if(x==2){//如果x为2,无法继续细分,输出2后return
printf("2");
return ;
}
if(x==1){//x为1的情况对应前面2^1,所以输出2
printf("2");
return ;
}
if(x==0){
printf("0");
return ;
}
bool flag=0;
for(int i=14;i>=0;--i){
if((1<<i)&x){
if(flag)printf("+");//如果不是第一个输出则输出加号
flag=1;
if(i!=1)printf("2(");//特判i是否等于1,如果等于1即2的1次方
f(i);//递归 //不需要输出2(1),输出2即可
if(i!=1)printf(")");
}
}
}
int main(){
int n;
while(cin>>n){
if(n!=1)f(n);
else printf("2(0)");
printf("\n");
}
return 0;//保持好习惯,和点赞一样
}