xmutoj1140(二进制简单操作)

2018-06-11  本文已影响0人  jenye_

弹幕天邪鬼
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;
} 
上一篇下一篇

猜你喜欢

热点阅读