描述
输入
一个正整数n(n≤20000)。
输出
一行,符合约定的n的0,2表示(在表示中不能有空格)。
输入样例 1
137
输出样例 1
2(2(2)+2+2(0))+2(2+2(0))+2(0)
思路:深搜 + bitset 结果是以 2及2(0) 为基本元构成的串
#include<iostream>
#include<cstring>
#include<vector>
#include<bitset>
using namespace std;
vector<string> res; //用vector存未知长度的结果
void dfs(int u){
bitset<16> a(u); //将数字化为二进制
bool is_first = true; //用来判断是否为第一个数
for(int i = 15; i >= 0; -- i) {
if(a.test(i)){
if(!is_first){ //不是第一个数则加“+”;
res.push_back("+");
}
is_first = false;
if(i == 0) res.push_back("2(0)"); //找规律
else if(i == 1) res.push_back("2");
else {
res.push_back("2("); //递归
dfs(i);
res.push_back(")");
}
}
}
return;
}
int main(){
int n;
cin >> n;
dfs(n);
for(auto l: res) cout << l; //迭代输出
return 0;
}