思路:
枚举n的二进制每个1选或不选
没有输出
貌似是dfs错了
code:
#include<bits/stdc++.h>
using namespace std;
long long n;
long long ans[65536];
long long cnt;
string bin(long long k){//十进制->二进制
string p;
if(k==0){
return "0";
}
while(k){
if(k%2){
p="1"+p;
}else{
p="0"+p;
}
k/=2;
}
return p;
}
long long dec(string k){//二进制->十进制
long long p=0;
int pw=0;
for(int i=k.size()-1;i>=0;i--){
if(k[i]==49){
p+=pow(2,pw);
}
pw++;
}
return p;
}
string p;//n的二进制
void dfs(int x,string q){//枚举
if(x==p.size()-1){
ans[++cnt]=dec(q);
return;
}
for(int i=x;i<p.size();i++){
if(p[i]==1){
dfs(i,q+"1");
dfs(i,q+"0");
}
q=q+"0";
}
}
void solve(){
dfs(0,"");
sort(ans,ans+cnt+1);
for(int i=1;i<=cnt;i++){
cout<<ans[i]<<endl;
}
}
int main(){
cin>>n;
p=bin(n);
solve();
return 0;
}