算中等题hh
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
// 总结一下 写一个递归函数就是反推
// 首先确定最里面的一层递归如何返回
// 随后 再确定 如何进入到最里面一层的递归
// 最后确定 最外层要如何进入递归
// 以本题为例 确定当x为1或2是最里层 直接返回对应答案
// 再确定 当x为4或2时 会进入最里层
// 最后确定 整个递归的过程是每轮分解最高次幂 就是最高的次数作为最外层进入递归
void dfs(int x){
if (x==1) {
cout<<"2(0)";
return ;
}
if (x==2){
cout<<"2";
return ;
}
//确定当x为1或2是最里层 直接返回对应答案
int z=1<<15;
for (int i=15;i>=0;i--){
if (x>>i&1){
if (i!=1&&i!=0) {
cout<<"2(";
dfs(i);
//最后确定 整个递归的过程是每轮分解最高次幂 就是最高的次数作为最外层进入递归
}
else dfs(1<<i);
//当x为4或2时 会进入最里层
x-=1<<i;
if (i!=1&&i!=0) cout<<")";
if (x>0)cout<<"+";
}
}
}
int main (){
int n;
while (scanf ("%d",&n)!=EOF){
dfs(n);
cout<<'\n';
}
return 0;
}
平台yyds,作者yyds
蓬蒿人yyds
蓬蒿人yyds
蓬蒿人yyds