Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
180437 | A班邓淑文 | 表达式求值 | C++ | 通过 | 100 | 13 MS | 3440 KB | 1129 | 2024-08-21 13:26:10 |
#include <bits/stdc++.h> using namespace std; int pri[100]; stack<long long> nums; stack<char> ops; void eval(){ long long a=nums.top();nums.pop(); long long b=nums.top();nums.pop(); char v=ops.top();ops.pop(); if(v=='+') nums.push(b+a); else if(v=='*')nums.push((b*a)%10000); else if(v=='-')nums.push((b-a)%10000); else if(v=='/')nums.push((b/a)%10000); else if(v=='%')nums.push((b%a)%10000); } long long cal(string s){ while(!nums.empty())nums.pop(); while(!ops.empty()) ops.pop(); long long val=0; ops.push('('); s=s+')'; for(int i=0;i<s.size();i++){ if(s[i]>='0' && s[i]<='9'){ val=s[i]-'0'; while(i+1<s.size() && s[i+1]>='0' && s[i+1]<='9'){ i++; val=val*10+s[i]-'0'; } nums.push(val); } else if(s[i]=='(')ops.push(s[i]); else if(s[i]==')'){ while(ops.top()!='(')eval(); ops.pop(); } else{ while(!ops.empty() && pri[ops.top()]>=pri[s[i]])eval(); ops.push(s[i]); } } return nums.top(); } int main() { pri['+']=1;pri['*']=2;pri['-']=1;pri['/']=2;pri['%']=2; string c; cin>>c; cout<<cal(c)%10000; return 0; }