利用比特位串来求幂集合
//date:2020.4.23 //利用比特位串来求幂集合 //比如 /* 000 -> j=0 i=0输出空 001 -> j=0 i=1 输出 a 010 -> j=1 i=2 输出b 011 -> j=1 j=0,i=3 输出 ab,一次类推 100 -> j=2,i=4 输出c 101 -> j=2,j=0,i=5 输出ac 110 -> j=2,j=1 i=6 输出 bc 111 -> j=2,j=1,j=0,i=7 输出abc */ #include <iostream> using namespace std; void getres(char a[],int i) { cout<<"{"; bool douhao=false;//控制逗号的输出 int j=0;//表示第几个字符 while(i>0) { if(i&1) //是1 i&1表示该数的个位与1做与运算,是1,表示是奇数也就是1 { if(douhao) cout<<","; cout<<a[j];//输出字符串 douhao=true; } i=i>>1; j++;//输出第几个字符 } cout<<"}"<<endl; } int main() { char a[]= {'a','b','c'}; int len=1<<sizeof(a)/sizeof(char);//表述要输出的集合数量 for(int i=0; i<len; i++) getres(a,i); return 0; }
输出结果
{} {a} {b} {a,b} {c} {a,c} {b,c} {a,b,c}