总时间限制: 1000ms 内存限制: 65536kB
描述
输入整数n(0<=n<=100000),以及整数i,j(0<=i,j<31,且i不等于j), 输出整数k,要求:
1. k的第i位和n相同;
2. 第j位和n不同;
3. 其他位都是0。
这里提到的位,指的是将n表示成二进制数后的位,最低位(最右边)是第0位
输入
第一行是整数t,表示数据组数
每组输入数据一行,包含三个整数n,i和j
输出
对每组输入数据,输出一行:符合题目要求的整数k
样例输入
2
23 4 3
3 0 1
样例输出
24
1
描述
输入整数n(0<=n<=100000),以及整数i,j(0<=i,j<31,且i不等于j), 输出整数k,要求:
1. k的第i位和n相同;
2. 第j位和n不同;
3. 其他位都是0。
这里提到的位,指的是将n表示成二进制数后的位,最低位(最右边)是第0位
输入
第一行是整数t,表示数据组数
每组输入数据一行,包含三个整数n,i和j
输出
对每组输入数据,输出一行:符合题目要求的整数k
样例输入
2
23 4 3
3 0 1
样例输出
24
1
#include<iostream>
using namespace std;
int main(){
int t,t1;
cin>>t;
for (t1 = 0;t1 < t;t1++)
{
int num;
cin>>num;
int k,j;
cin>>k;
cin>>j;
int i = 0;
int two[100000];
while (num > 0)
{
if (num % 2 == 1)
{
two[i] = 1;
i++;
}
else
if (num % 2 == 0)
{
two[i] = 0;
i++;
}
num = num / 2;
}
i = i - 1;
int l = i;
int two1[100000],n;
int temp1,temp2;
if (k <= l && j <= l)
{
temp1 = 1 - two[j];
temp2 = two[k];
}
else
if (k<= l && j > l)
{
temp1 = 1;
temp2 = two[k];
l = j;
}
else
if (k > l && j <=l)
{
temp1 = 1-two[j];
temp2 = 0;
l = k;
}
else
if (k >l && j> l)
{
temp1= 1;
temp2 = 0;
if ( k>=j)
l = k;
else
l = j;
}
for (i = 0; i <= l; i++)
{
two1[i] = 0;
}
two1[l-j] = temp1;
two1[l-k] = temp2;
num = 0;
for (i = 0;i <= l;i++)
{
cout<<two1[i];
}
cout<<endl;
for (i = l; i >= 0; i--)
{
temp1 = 1;
if (i != l)
{
for (n =1; n <= l - i; n++)
{
temp1 = temp1 * 2;
}
two1[i] = two1[i] * temp1;
}
else
if (i == l)
{
two1[i] = 1 * two1[i];
}
}
i = 0;
while (i <= l)
{
num = two1[i] + num;
i++;
}
cout<< num <<endl;
}
system("pause");
return 0;
}