弹幕天邪鬼
Time Limit:1000MS Memory Limit:65536K
Total Submit:154 Accepted:93
Description
鬼人正邪只是一个性格扭曲的天邪鬼,她一天到晚脑子里总想着和其他人相反的事情。
别人一反感她就高兴,看到别人一高兴她就开始心生厌恶。在数学中,正邪很喜欢相反数。不过她既然是一个性格扭曲的天邪鬼,她认知的相反数和凡人怎么能一样呢?
给定一个十进制数A,正邪定义的相反数就是把这个数转化为二进制之后,忽略高位的0,然后作轴对称,例如对于十进制的数123(1111011),它的相反数是111(1101111)。
Input
首先是一个正整数T,表示测试数据的组数。
对于每组测试数据,只有一个正整数A(A<=10^9)
Output
对于每组测试数据,输出正邪眼中的相反数。
Sample Input
2
123
5201314
Sample Output
111
2284921
#include<iostream>
#include<algorithm>
using namespace std;
int setvalue(int x,int value,int pos){
if(value){
x = x|(1<<pos);
}else{
x = x&~(1<<pos);
}
return x;
}
int getvalue(int x,int pos){
x = x&(1<<pos);
return x>>pos;
}
int main(){
int T;
cin>>T;
while(T--){
int len=0;
int x;
cin>>x;
int tempx;
tempx = x;
//计算二进制数长度
while(tempx>0){
tempx /= 2;
len++;
}
int L,R;
L = len;
R = 1;
while(L>R){
int tempL;
int tempR;
tempL = getvalue(x,L-1);
tempR = getvalue(x,R-1);
x = setvalue(x,tempL,R-1);
x = setvalue(x,tempR,L-1);
R +=1;
L -=1;
}
cout<<x<<endl;
}
return 0;
}
网友评论