/* hdu 2051 题意:将一个十进制数转换成二进制数 */ #include <iostream> #include <bitset> using namespace std; int main(void) { int n; bitset<10> res = 0; //bitset<10> res = 1 只能使 res[0] = 1; while(cin >> n) { res = n; int index = 9; while(!res[index]) { --index; } while(index >= 0) { cout << res[index]; --index; } cout << endl; } //system("pause"); return 0; } /* 题意:输入组数d, 在输入n,把n转换成2进制,把小标为1的的小标输出 例如:13 (1011) 输出0 2 3 */ #include <iostream> #include <bitset> using namespace std; int main(void) { int d, n, position[32]; bitset<32> test; cin >> d; while(d--) { int i, j; cin >> n; test = n; i = 31; while(!test[i]) --i; n = i; i = 0; while(i <= n) { if(test[i] == 1) { if(i != n) cout<< i << " "; else cout<< i << endl; } i++; } /* for(i = 0, j = 0; i <= n; ++i) { if(test[i]) { position[j++] = i; } } for(i = 0; i < j - 1; ++i) cout << position[i] << " "; cout << position[i] << endl; */ }//system("pause"); return 0; } /* hdu 1196 题意:例如88(1011000) 找到二进制的最低位1000 转化成十进制输出即可 */ #include <bitset> #include <cmath> #include <iostream> #include <cstdio> using namespace std; int main(void) { bitset<10> res; int n, sum; while(cin >> n && n) { res = n; int index = 0; while(!res[index]) ++index; // res小标是从 0 开始的 88(1011000)表示成res 0001101000 sum = (int )pow(2.0,index); cout << sum << endl; } return 0; } //Bitset[size=+0] #include <iostream> #include <bitset> using namespace std; int main () { bitset<16> mybits; cout << "enter a binary number: "; cin >> mybits; if (mybits.any()) cout << "mybits has " << (int)mybits.count() << " bits set./n"; else cout << "mybits has no bits set./n"; return 0; } //------------------------------------------------------------------------------------------- bitset<10> b(string("10110111011110")); //以10110111011110的前十个字符为 bitset的元素 cout<<b<<endl;//----1011011101 bitset<10> b1(string("10110111011110"),10);以10110111011110的第十个字符开始的字符为 bitset的元素,不够的前面补0 cout<<b1<<endl;//----0000001110 bitset<10> b2(string("10110111011110"),10,2);//以10110111011110的第十个字符开始的2个字符为bitset的元素,不够的前面补0 cout<<b2<<endl;//----000000011 cout << "267 as binary short: " << bitset<numeric_limits<unsigned short>::digits>(267) << endl; cout << "267 as binary long: " << bitset<numeric_limits<unsigned long>::digits>(267) << endl;// cout << "10,000,000 with 24 bits: " << bitset<24>(1e7) << endl;//000...010000000 //---------------------------------------------------------------------------------------------- 2.count用法 size_t count ( ); //返回mybits中1的个数 3.flip用法 bitset<N>& flip ( ); //返回mybits的反码 bitset<N>& flip ( size_t pos ); //将从右边数第pos个元素取反码 样例代码: #include <iostream> #include <string> #include <list> #include <vector> #include <algorithm> #include <map> #include <set> #include <bitset> #define Elem int using namespace std; int main() { bitset<10> mybits(string("1010101000")); cout<<mybits.flip(2)<<endl; cout<<mybits.flip()<<endl; return 0; } 4.none的用法: bool none ( ) const; 注: 如果mybits中没有1,返回ture;如果mybits中有1,返回false. 5.[]用法: 样例代码: #include <iostream> #include <bitset> using namespace std; int main () { bitset<4> mybits; mybits[1]=1; // 0010 mybits[2]=mybits[1]; // 0110 cout << "mybits: " << mybits << endl; return 0; } 6.reset用法 bitset<N>& reset ( ); //将mybits中的所有位置0 bitset<N>& reset ( size_t pos ); //将从右数索引为pos的位置0 7.set用法 bitset<N>& set ( ); //将mybits的所有位置1 bitset<N>& set ( size_t pos, bool val = true );//将从右数索引为pos的位置val(1或0) 8.size用法 size_t size() const; //返回mybits的位数 9.test用法 bool test ( size_t pos ) const;//如果从右数索引为pos的位置为1,返回true,否则返回false 10.to_string和to_ulong的用法 注:将二进制数转化为string型或usigned long型 样例代码(to_string): #include <iostream> #include <string> #include <list> #include <vector> #include <algorithm> #include <map> #include <set> #include <bitset> #define Elem int using namespace std; int main() { string mystring; bitset<4> mybits; // mybits: 0000 mybits.set(); // mybits: 1111 mystring=mybits.to_string(); cout << "mystring: " << mystring << endl; return 0; } 样例代码(to_ulong): #include <iostream> #include <string> #include <list> #include <vector> #include <algorithm> #include <map> #include <set> #include <bitset> #define Elem int using namespace std; int main() { bitset<4> mybits; // mybits: 0000 mybits.set(); // mybits: 1111 cout << mybits<<"as an integer is: " << mybits.to_ulong()<< endl; return 0; } #include <iostream> #include <bitset> #include <string> #include <cstdio> using namespace std; int main() { /*-----声明-----*/ bitset<32> bt1; /*位的计数从0开始,即0~31 缺省情况下,所有的位都被初始化为0 */ bitset<32> bit2(0xffff);//位构造函数显式提供一个无符号参数 bitset<32> bit(0xff); string bitval("10100"); bitset<32> bit3(bitval); int n; cin >> n; bt1 = n; cout << bt1.size() << endl; if(bt1.any())//当bitset对象含有一位或多位被置为1时,返回true cout<<"初始化是含有1."<<endl; else if(bt1.none())//当bitset对象不含有1时,返回true cout<<"初始化是不含1."<<endl; /*--------置位操作----------*/ bt1[26] = 1;//将26位设置为1 bt1.set(27);//将27位设置为1 bt1[26] = 0;//将26位设置为0 bt1.reset(27);//将26位设置为0 //全部置位 bt1.set(); //全部置为 1 bt1.reset(); // 全部置为 0 cout<<"被置为1的位数有:"<<bt1.count()<<endl; //返回被置为1的的位的个数 if(bt1.test(27))//或者用下标操作符bt1[27] cout<<"第27位被置为1."<<endl; /*-----翻转操作-----*/ bt1.flip(0);//翻转第0位 bt1[1].flip();//翻转第1位 bt1.flip();//全部翻转 /*-----类型转化-----*/ string sbt = bt1.to_string(); unsigned long lbt = bt1.to_ulong(); return 0; } bitset用法 2009-11-15 16:54 2009-11-05 15:45 构造函数 bitset<n> b; b有n位,每位都为0.参数n可以为一个表达式. 如bitset<5> b0;则"b0"为"00000"; bitset<n> b(unsigned long u); b有n位,并用u赋值;如果u超过n位,则顶端被截除 如:bitset<5>b0(5);则"b0"为"00101"; bitset<n> b(string s); b是string对象s中含有的位串的副本 string bitval ( "10011" ); bitset<5> b0 ( bitval4 ); 则"b0"为"10011"; bitset<n> b(s, pos); b是s中从位置pos开始位的副本,前面的多余位自动填充0; string bitval ("01011010"); bitset<10> b0 ( bitval5, 3 ); 则"b0" 为 "0000011010"; bitset<n> b(s, pos, num); b是s中从位置pos开始的num个位的副本,如果num<n,则前面的空位自动填充0; string bitval ("11110011011"); bitset<6> b0 ( bitval5, 3, 6 ); 则"b0" 为 "100110"; os << b 把b中的位集输出到os流 os >>b 输入到b中,如"cin>>b",如果输入的不是0或1的字符,只取该字符前面的二进制位. bool any( ) 是否存在置为1的二进制位?和none()相反 bool none( ) 是否不存在置为1的二进制位,即全部为0?和any()相反. size_t count( ) 二进制位为1的个数. size_t size( ) 二进制位的个数 flip() 把所有二进制位逐位取反 flip(size_t pos) 把在pos处的二进制位取反 bool operator[]( size_type _Pos ) 获取在pos处的二进制位 set() 把所有二进制位都置为1 set(pos) 把在pos处的二进制位置为1 reset() 把所有二进制位都置为0 reset(pos) 把在pos处的二进制位置为0 test(size_t pos) 在pos处的二进制位是否为1? unsigned long to_ulong( ) 用同样的二进制位返回一个unsigned long值 string to_string () 返回对应的字符串 #include<iostream> #include<bitset> using namespace std; bitset<3000>w; int main() { int n,a,b,c; while(cin>>n) { cin>>a; w.reset(); c=n; while(--c) { cin>>b; if(abs(a-b)<n&&abs(a-b)!=0) w.set(abs(a-b)); a=b; } if(w.count() == n-1) cout<<"Jolly"<<endl ; else cout<<"Not jolly"<<endl ; } return 0; }