AC

虚空终端  •  2个月前


注意一下符号处理有一个滞后的性质,即扫描到了符号截停数字后处理的是上一个符号,显然第一个符号之前的符号默认为加

#include<iostream>
#include<algorithm>
#include<cstring>
#include<stack>

using namespace std;

stack<int> s;

int main()
{
	char c='+';
	string str;
	cin>>str;
	int num=0;
	for(auto i:str)
	{
		if(i=='+'||i=='*')
		{
			if(c=='+')
			{
				s.push(num);
				num=0;	
			}
			else
			{
				num=(num*s.top())%10000;
				s.pop();
				s.push(num);
				num=0;	
			}
			c=i;
		}	
		else
		{
			num*=10;
			num+=i-'0';
			num%=10000;
		}
	}
	if(c=='+')
	{
		s.push(num);
	}
	else if(c=='*')
	{
		num=(num*s.top())%10000;
		s.pop();
		s.push(num);
	}	
	int ans=0;
	while(!s.empty())
	{
		ans+=s.top();
		ans%=10000;
		s.pop();
	}
	cout<<ans%10000<<endl;
	return 0;
}

评论:

请先登录,才能进行评论