求助大佬,为啥20分。。。。
查看原帖
求助大佬,为啥20分。。。。
251288
AC神楼主2023/2/24 15:04
#include<iostream>
#include<stack>
#include<cstring>
#include<unordered_map>
#include<algorithm>
using namespace std;
stack<unsigned long long> num;
stack<char>opt;
void eval()
{
    unsigned long long b=num.top();num.pop();
    unsigned long long a=num.top();num.pop();
    char c=opt.top();opt.pop();
    if(c=='+') num.push(a+b);
    if(c=='*') num.push(a*b);

}
int main()
{
    unordered_map <char,int> pr{{'+',1},{'/',2}};
    string str;
    cin>>str;
    for(unsigned long long i=0;i<str.size();i++)
    {
        auto c=str[i];
        if(isdigit(c)){
            unsigned long long x=0,j=i;
            while(j<str.size()&&isdigit(str[j])){
                x=x*10+str[j++]-'0';
            }
            i=j-1;
            num.push(x);
        }
        else{
            while(opt.size()&&pr[opt.top()]>=pr[c]) eval();
            opt.push(c);
        }
    }
    while(opt.size()) eval();
    cout<<num.top()%10000<<endl;
}

2023/2/24 15:04
加载中...