求助
  • 板块学术版
  • 楼主陳宇翔
  • 当前回复0
  • 已保存回复0
  • 发布时间2020/7/30 00:00
  • 上次更新2023/11/6 21:49:02
查看原帖
求助
201738
陳宇翔楼主2020/7/30 00:00

P1310 表达式的值50分

蒟蒻求大佬帮忙

这是代码

#include<iostream>
#include<cstdio>
#include<stack>
#define p 10007
using namespace std;
int n;string s;
stack <int> st0,st1;
stack <char> st;
void solve(){
	int a0=st0.top(),a1=st1.top();
    	st0.pop();st1.pop();
	int b0=st0.top(),b1=st1.top();
    	st0.pop();st1.pop();
	char c=st.top();st.pop();
	if (c=='+')
    	st0.push(a0*b0%p),
	st1.push((a0*b1+a1*b0+a1*b1)%p);
	if (c=='*') 
    	st0.push((a0*b0+a0*b1+a1*b0)%p),
	st1.push(a1*b1%p);
}
int main(){
	cin>>n>>s;
    	s='('+s+')';
	for (int i=0;i<s.size();i++){
		if (s[i]==')' || s[i]=='+')
        		while (st.top()!='(') solve();
		if (s[i]=='*')
        		while (st.top()=='*') solve();
		if (s[i]!=')') st.push(s[i]);
		if (s[i+1]!='(' && s[i]!=')') st0.push(1),st1.push(1);
	}
	printf("%d",st0.top()%p);
	return 0;
}
2020/7/30 00:00
加载中...