自己做的计算器
  • 板块灌水区
  • 楼主fe117
  • 当前回复17
  • 已保存回复17
  • 发布时间2023/7/28 13:29
  • 上次更新2023/11/3 07:14:48
查看原帖
自己做的计算器
1025217
fe117楼主2023/7/28 13:29
#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±2^{50}

基于与或非建造

有什么建议吗(这个能过A+B吗?)

2023/7/28 13:29
加载中...