用位運算來處理集合中的交,並,補(對稱差)運算

/*
    @author : liuwen
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <climits> //INT_MAX INT_MIN LONG_LONG_MAX LONG_LONG_MIN
#include <cstdlib>
#include <queue>
#include <stack>
#include <map>
#include <vector>
#include <cmath>
#include <algorithm>
using namespace std;
int main()
{
    int  decimal1 = 36,decimal2=5;
    cout<<"第一個數(10進制):"<<decimal1<<endl;
    cout<<"第二個數(10進制):"<<decimal2<<endl;
    char binary1[255],binary2[255],binary3[255];
    itoa(decimal1,binary1,2);
    itoa(decimal2,binary2,2);

    cout<<"各種集合之間的操作:"<<endl;

    //交集
    cout<<"第一:交集 (A&B) "<<endl;
    cout<<"    A = "<<binary1<<endl;
    cout<<"    B = "<<binary2<<endl;
    itoa(decimal1&decimal2,binary3,2);
    cout<<"    A&B == "<<binary3<<"(2)"<<endl;
    cout<<"    A&B == "<<(decimal1&decimal2)<<"(10)"<<endl<<endl;


    //並集
    cout<<"第二:並集 (A|B) "<<endl;
    cout<<"    A = "<<binary1<<endl;
    cout<<"    B = "<<binary2<<endl;
    itoa(decimal1|decimal2,binary3,2);
    cout<<"    A|B == "<<binary3<<"(2)"<<endl;
    cout<<"    A|B == "<<(decimal1|decimal2)<<"(10)"<<endl<<endl;

    //對稱差集
    cout<<"第三:對稱差集 (A^B) "<<endl;
    cout<<"    A = "<<binary1<<endl;
    cout<<"    B = "<<binary2<<endl;
    itoa(decimal1^decimal2,binary3,2);
    cout<<"    A|B == "<<binary3<<"(2)"<<endl;
    cout<<"    A|B == "<<(decimal1^decimal2)<<"(10)"<<endl<<endl;

    //補集
    cout<<"對稱差集下面特殊的集合情況----->全集的補集:"<<endl;
    decimal1 = (1<<10)-1; //2^10-1,   全集爲10個1
    decimal2 = 37;       //子集 100101
    itoa(decimal1,binary1,2);
    itoa(decimal2,binary2,2);
    cout<<"    全集U = "<<binary1<<"(2)"<<"-----"<<decimal1<<"(10)"<<endl;
    cout<<"    子集S =     "<<binary2<<"(2)"<<"-----"<<decimal2<<"(10)"<<endl;
    itoa(decimal1^decimal2,binary3,2);
    cout<<"    補集C = "<<binary3<<"(2)"<<"-----"<<(decimal1^decimal2)<<"(10)"<<endl<<endl;
    //可以發現,補集相當於U-S
    cout<<"可以發現,補集相當於U-S="<<decimal1<<" - "<<decimal2<<" = "<<decimal1-decimal2<<"(10)"<<endl;
    cout<<"但是速度卻沒有用位運^快"<<endl;
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章