#include <iostream>
using namespace std;
bool yu(bool in,bool in2){
//与门
if(in&&in2){
return true;
}
return false;
}
bool huo(bool in,bool in2){
//或门
if(in||in2){
return true;
}
return false;
}
bool fei(bool in){
//非门
return !in;
}
bool yihuo(bool in,bool in2){
//相等(异或)
if(in==in2){
return true;
}
return false;
}
bool i3d2(bool in,bool in2,bool in3){
//输入三个数,2或3为真,返回真。
bool o1=yu(in,in2);
bool o2=yu(in,in3);
bool o3=yu(in2,in3);
bool o4=huo(o1,o2);
bool o5=huo(o3,o4);
return o5;
}
bool i3dj(bool in,bool in2,bool in3){
//输入三个数,奇数个为真,返回真。
bool o1=yu(in,in2);
bool o2=yu(in,in3);
bool o3=yu(in2,in3);
bool o4=huo(o1,o2);
bool o5=huo(o3,o4);
bool o6=yu(in3,o1);
bool o7=fei(o6);
bool o8=yu(o5,o7);
bool o9=fei(o8);
bool o10=huo(in,in2);
bool o11=huo(in3,o10);
bool o12=yu(o9,o11);
return o12;
}
bool i31d23(bool in,bool in2,bool in3){
//输入三个数,如果第一个数比另两个数和小,返回真。
bool o1=fei(in);
bool o2=fei(in2);
bool o3=fei(in3);
bool o4=yu(o1,o2);
bool o5=yu(in3,o4);
bool o6=yu(o1,o3);
bool o7=yu(in2,o6);
bool o8=yu(in2,o1);
bool o9=yu(in3,o8);
bool o10=yu(in,in2);
bool o11=yu(in3,o10);
bool o12=huo(o5,o7);
bool o13=huo(o9,o11);
bool o14=huo(o12,o13);
return o14;
}
int main(){
int n=50;//长度
int a=0,b=0,i=n-1,d,e;//几个变量用于输入输出
int mi2=1,ans=0;////
bool aa=false;
bool l[n]={};//答案列表
bool gd[n]={},ge[n]={};////
int i2=0;////
bool dzf=0,ezf=0;////
char c;//运算方式
cin>>d>>c>>e;
if(d<0){
d*=-1;
dzf=1;
}
if(e<0){
e*=-1;
ezf=1;
}
while(d>0){
gd[i2]=d%2;
d=d/2;
i2++;
}
while(i2>=0){
a=gd[i2]+a*10;
i2--;
}
i2=0;
while(e>0){
ge[i2]=e%2;
e=e/2;
i2++;
}
while(i2>=0){
b=ge[i2]+b*10;
i2--;
}
if(dzf){
a*=-1;
}
if(ezf){
b*=-1;
}
//cout<<a<<" "<<b<<endl;
if(c=='+'){
if(a<0){
if(b<0){
cout<<"-";
a*=-1;
b*=-1;
}
else{
c='-';
a*=-1;
swap(a,b);
}
}
else if(b<0){
c='-';
b*=-1;
}
}
if(c=='-'){
if(a<0){
if(b<0){
b*=-1;
swap(a,b);
}
else{
cout<<"-";
a*=-1;
b*=-1;
c='+';
}
}
else if(b<0){
b*=-1;
c='+';
}
}
if(c=='+'){
while(a||b){
l[i]=i3dj(a%10,b%10,aa);
aa=i3d2(a%10,b%10,aa);
a=a/10;
b=b/10;
i--;
}
if(aa==1){
l[i]=1;
}
}
if(c=='-'){
if(a<b){//正负
swap(a,b);
cout<<"-";
}
while(a||b){
l[i]=i3dj(a%10,b%10,aa);
aa=i31d23(a%10,b%10,aa);
a=a/10;
b=b/10;
i--;
}
if(aa==1){
l[i]=1;
}
}
bool flag=false;
/*for(int ii=0;ii<50;ii++){
if(l[ii]==true){//隐去前导0
flag=true;
}
if(flag){
cout<<l[ii];
}
}
if(!flag){
cout<<0;
}*/
for(int ii=49;ii>=0;ii--){
ans+=l[ii]*mi2;
mi2*=2;
}
cout<<ans;
return 0;
}
只支持加减,最大±250
基于与或非建造
有什么建议吗(这个能过A+B吗?)