Aizu Online Judge(AOJ)が提供している「プログラミング応用」(ITP2)の10_B問題をC++で解いてみました。
ITP2では、「プログラミングのための基礎ライブラリを獲得します」とあります。トピック#10では、ビットセットI(bitset)を学びます。
問題(10_B: Bit Operation II)
問題はリンク先をご覧ください。
AOJ ITP2 10_B問題: Bit Operation II
bitset クラスについて学びます。
bitset クラスについて
以下は、cpprefjp 様の記事を参考にさせていただきました。
今回使う bitset クラスの演算子は、10_A で紹介しています。
C++ プログラム例(ITP2 10_B)
32ビット整数が2つ与えられます。その整数を2進数に変換して、以下の操作を行い、その結果をビット列として出力します。
- AND:2つの整数のビット論理積を求める。
- OR:2つの整数のビット論理和を求める。
- XOR:2つの整数のビット排他的論理和を求める。
整数を引数に bitset クラスのコンストラクタを呼び出し(11、12行目)、演算を行った結果を出力します(14ー16行目)。
#include <iostream>
#include <bitset>
using namespace std;
int main()
{
unsigned long int a, b;
cin >> a >> b;
bitset<32> bs_a(a);
bitset<32> bs_b(b);
cout << (bs_a & bs_b) << endl;
cout << (bs_a | bs_b) << endl;
cout << (bs_a ^ bs_b) << endl;
return 0;
}
上記プログラムは、AOJ で「AC(Accepted=正解)」と判定されました。
最後に
前回に続き、bitset クラスで使える演算子を試しました。
引き続き、ITP2 の問題を紹介していきます。