NYIST 412 Same binary weight使用bitset

這兩天在學習STL,剛開始我以爲bitset沒有什麼用,直到看到題目才知道大錯特錯,bitset也是很有用的容器。

先說一下按位與&運算符:同時爲一,結果才爲一,否則都爲0 。

題目鏈接:點擊打開鏈接    

先重新學習一下bitset位集合容器。

bitset容器是一個bit位元素的序列容器,每個元素只佔一個bit位,取值爲0或1.

bitset類的方法的介紹:

1、創建bitset對象:  bitset<10>b;  能容納10個元素的對象b

                                      bitset<10>b(8); 將8化爲二進制存到b中

2、b.any()    b中是否存在置爲1的二進制位?

     b.none()   b中不存在置爲1的二進制位嗎?

       b.count();        b中置爲1的二進制個數
         b.size() ;        b中二進制的個數
         b.test(1);       b中在1位置的二進制位是否爲1
         b.set();          把b中所有二進制位都置爲1
         b.reset();      把b中所有二進制位都置爲0
         b.set(5);       把b中在5位置的二進制位置爲1
         b.reset(5);   把b中在5位置的二進制位置爲0
         b.flip();          把b中所有二進制位按位取反
         b.flip(5);       把在5位置的二進制位按位取反
         b.to_ulong();在b中同樣的二進制位返回一個unsigned long值
         os<<b;        把b中的位集輸出到os流

以下是這道題目AC的代碼:

 
#include<bitset>
#include<iostream>
using namespace std;
int main()
{
        int i,j,n,ct;
        while(cin>>n)
        {
                i=0,ct=0;
                bitset<33>b;
                while(n)      //存爲二進制
                {
                        if(n%2)
                            b.set(i);
                        n/=2;
                        i++;
                }
                for(j=0;j<i;j++) //找到爲01的位置j
                {
                        if(b.test(j)&&b.test(j+1)==0)
                        {
                                b.flip(j);    //1和0互換位置,也就是兩個數都取反
                                b.flip(j+1);
                                break;
                        }
                }
                for(i=0;i<j;i++) //計算在01之後有多少個1
                {
                        if(b.test(i))
                          ct++;
                }
                for(i=0;i<j;i++)//將01之後的數都置爲0
                  b.reset(i);
                for(i=0;i<ct;i++)//將ct個1放在末尾
                 b.set(i);
                cout<<b.to_ulong()<<endl;//輸出這個數
        }
        return 0;
}
        



                               



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