计算机学院大学生程序设计竞赛(2015’12) 1005 Bitwise Equations

#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

const int maxn=120;
long long X,K;
long long  basex[maxn];
long long basek[maxn];
int totx,totk;

int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%lld%lld",&X,&K);

        totx=totk=0;
        memset(basex,0,sizeof basex);
        memset(basek,0,sizeof basek);


        while(X)
        {
            basex[totx++]=X%2;
            X=X/2;
        }
        while(K)
        {
            basek[totk++]=K%2;
            K=K/2;
        }

        
        int now=0;
        for(int i=0;i<totk;i++)
        {
            for(int j=now;;j++)
            {
                if(basex[j]==0)
                {
                    basex[j]=basek[i];
                    now=j+1;
                    break;
                }
                else
                {
                    basex[j]=0;
                    now=j+1;
                }
            }
        }
        for(int i=now;i<=100;i++) 
            if(basex[i]==1) basex[i]=0;
      

        long long ans=0;
        for(int i=0;i<=100;i++) ans=ans+(long long)(basex[i]*pow(2.0,i));
        printf("%lld\n",ans);
    }
    return 0;
}

 

posted @ 2015-12-27 17:38  Fighting_Heart  阅读(112)  评论(0编辑  收藏  举报