Cod sursa(job #1483499)

Utilizator tudormaximTudor Maxim tudormaxim Data 9 septembrie 2015 14:54:32
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.38 kb
#include <bits/stdc++.h>
using namespace std;
stack <int> nums;
stack <char> ops;

void operation()
{
    char op=ops.top(); ops.pop();
    int b=nums.top(); nums.pop();
    int a=nums.top(); nums.pop();
    if(op=='+') nums.push(a+b);
    else if(op=='-') nums.push(a-b);
    else if(op=='*') nums.push(a*b);
    else if(op=='/') nums.push(a/b);
}

int priority(char op)
{
    if(op=='+' || op=='-') return 1;
    if(op=='/' || op=='*') return 2;
    return 0;
}

void solve(string s)
{
    int i, p, x;
    ops.push('1');
    for(i=0; i<s.size(); i++)
    {
        if(s[i]=='(') ops.push(s[i]);
        else if(s[i]==')')
        {
            while(ops.top()!='(') operation();
            ops.pop();
        }
        else
        {
            p=priority(s[i]);
            if(p)
            {
                while(priority(ops.top())>=p) operation();
                ops.push(s[i]);
            }
            else
            {
                for(x=0; isdigit(s[i]); i++)
                    x=x*10+(s[i]-'0');
                nums.push(x);
                i--;
            }
        }
    }
    while(ops.size()>1) operation();
}

int main()
{
    ifstream fin ("evaluare.in");
    ofstream fout ("evaluare.out");
    string s;
    fin >> s;
    solve(s);
    fout << nums.top();
    fin.close();
    fout.close();
    return 0;
}