C. Short Program

来源:互联网 发布:电脑电子琴软件下载 编辑:程序博客网 时间:2024/06/07 20:45

很烦最近代码写的跟屎一样

这题很简单,按位来看,与操作只有与0才有意义并且将当前为置为0,或操作只有或1才有意义并且将当前位置为1,也就是说我们把与0看做将当前位置为0,将或1看做将当前位置为1,

异或也是异或1才有意义(这里的变化比较多,用-1表示输入的初始值,那么
如果 异或1并且当前位为 -1,当前操作变为异或1。
如果 异或1并且当前位为 1,当前操作变为与0。
如果 异或1并且当前位为 0,当前操作变为或1。

#include<bits/stdc++.h>using namespace std;int main(){    int op[12];    for(int i=0;i<11;i++) op[i]=-1;    int n;    char c;    int p;    cin>>n;    for(int i=0;i<n;i++)    {        scanf(" %1c%d",&c,&p);        int temp=1;        for(int j=0,temp=1;temp<=1024;j++,temp*=2)        {            if(temp&p) {                if(c=='|') op[j]=1;                if(c=='^') {                    if(op[j]==-1) op[j]=2;                    else if(op[j]==0) op[j]=1;                    else if(op[j]==1) op[j]=0;                    else if(op[j]==2) op[j]=-1;                }            }            else {                if(c=='&') op[j]=0;            }        }    }    int yh,yu,huo;    yh=huo=0;    yu=1023;    for(int i=0,temp=1;i<10;i++)    {        temp=1<<i;        if(op[i]==1)            huo+=temp;        if(op[i]==0)            yu-=temp;        if(op[i]==2)            yh+=temp;    }    cout<<3<<endl;    cout<<"| "<<huo<<endl<<"& "<<yu<<endl<<"^ "<<yh<<endl;}
原创粉丝点击