Cod sursa(job #3140138)

Utilizator andiRTanasescu Andrei-Rares andiR Data 4 iulie 2023 10:00:47
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <iostream>
#include <fstream>

using namespace std;
typedef long long ll;
ifstream fin ("evaluare.in");
ofstream fout ("evaluare.out");

int pos;
string sir;
short s[256];
ll factor(), termen();
ll evaluare(){
    ll r=termen();
    while (s[sir[pos]]==1){
        pos++;
        if (sir[pos-1]=='+')
            r+=termen();
        else r-=termen();
    }
    return r;
}
ll termen(){
    ll r=factor();
    while (s[sir[pos]]==2){
        pos++;
        if (sir[pos-1]=='*')
            r*=factor();
        else r/=factor();
    }
    return r;
}
ll factor(){
    ll r=0;
    if (sir[pos]=='('){
        pos++;
        r=evaluare();
        pos++;
    }
    else while (s[sir[pos]]==3){
            r=r*10+sir[pos]-'0';
            pos++;
        }
    return r;
}
int main()
{
    s['+']=s['-']=1;
    s['*']=s['/']=2;
    for (int i='0'; i<='9'; i++)
        s[i]=3;

    fin>>sir;
    sir+='$';
    fout<<evaluare();

    return 0;
}