这道题是利用了STL里面的bitset,很方便。
-------------以下是题目-------------
描述
输入整数 n ( 0 <=n<= 2^30) , 以及整数i,j(0 <= i,j <31,i < j-1), 输出整数k(按十六进制输出结果 ),k的第i位和n相同,第j位和n不同,i,j之间的位是1, 其他位都是0。这里提到的所有的位,指的都是二进制位,最右边算第0位。
输入
第一行是整数 t,表示数据组数。
每组输入数据是一行,三个整数 n,i和j。
输出
对每组输入数据,按十六进制输出结果。
-------------以下是我的代码-------------
#include<iostream>
#include<bitset>
using namespace std;
int main()
{
int t,n, i, j;
cin >> t;
while (t--)
{
cin >> n >> i >> j;
bitset<32> b(n);
for (int l = 0; l <i; l++)
b.reset(l);//将i以前的位全部置0
for (int l = i + 1; l < j; l++)
b.set(l);//将i和j之间的位置1
b.flip(j);//翻转j位
for (int l = j + 1; l < 32; l++)
b.reset(l);//j位以后全部置0
cout << hex<< b.to_ulong() << endl;//将结果转成整数,以16进制的形式输出
}
return 0;
}