2483boolean表达式计算.cpp

来自「自己的ac代码 在acm.zju.edu.cn 上的题目」· C++ 代码 · 共 110 行

CPP
110 行
字号
#include<iostream>
#include<string.h>
using namespace std;
#include<stack>
stack<char> ch;
stack<int>va;
char s[1000];
int main()
{
	int i,j,k,l;
	int T=0;
	int len;
	while(gets(s))
	{
		if(strcmp(s,"")==0)break;
		len=strlen(s);
		while(!ch.empty())ch.pop();
		while(!va.empty())va.pop();
		int va1,va2,ch1,ch2;
		for(i=len-1;i>=0;i--)
		{
			if(s[i]=='F')va.push(0);
			else if(s[i]=='V')va.push(1);
			else if(s[i]==')')ch.push(s[i]);
			else if(s[i]=='!')
			{
				va1=va.top();va.pop();
				va.push(1-va1);
			}
			else if(s[i]=='&')
			{
				ch.push(s[i]);
			}
			else if(s[i]=='|')
			{
				while(!ch.empty())
				{
					ch1=ch.top();
					if(ch1==')')break;
					ch.pop();
					va1=va.top();va.pop();
					va2=va.top();va.pop();
					if(ch1=='|')
					{
						va.push(va1 | va2);
					}
					else if(ch1=='&')
					{
						va.push(va1 & va2);
					}
				}
				ch.push(s[i]);
			}
			else if(s[i]=='(')
			{
				while(!ch.empty())
				{
					ch1=ch.top();ch.pop();
					if(ch1==')')break;					
					va1=va.top();va.pop();
					va2=va.top();va.pop();
					if(ch1=='|')
					{
						va.push(va1 | va2);
					}
					else if(ch1=='&')
					{
						va.push(va1 & va2);
					}
				}
			}
		}
		while(!ch.empty())
		{
			ch1=ch.top();ch.pop();
			va1=va.top();va.pop();
			va2=va.top();va.pop();
			if(ch1=='|')
			{
				va.push(va1 | va2);
			}
			else if(ch1=='&')
			{
				va.push(va1 & va2);
			}
		}
		va1=va.top();
		T++;
		if(va1==1)
			printf("Expression %d: V\n",T);
		else
			printf("Expression %d: F\n",T);
	}
	return 0;
}


	





				


		


⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?