Cod sursa(job #2307712)

Utilizator DimaTCDima Trubca DimaTC Data 25 decembrie 2018 15:18:45
Problema Evaluarea unei expresii Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include<bits/stdc++.h>
#define ll long long
using namespace std;

string s;
int p;

int fact();
int termen();

int eval() {
    int r = termen();

    while (s[p] == '+' || s[p] == '-') {
        ++p;
        if (s[p-1]=='+') r+=termen();
        else r-=termen();
    }
    return r;
}


int termen() {
    int r = fact();

    while (s[p] == '*' || s[p] == '/') {
        ++p;
        if (s[p-1] == '*') r*=termen();
        else r/=termen();
    }
    return r;
}

int fact() {
    int r = 0;
    if (s[p] == '(') {
            ++p;
            r = eval();
            ++p;
    } else {
        while (p<s.size() && s[p]>='0' && s[p]<='9') {
            r = r*10 + (s[p]-'0');
            ++p;
        }
    }
    return r;
}

int main() {
    ifstream cin("evaluare.in");
    ofstream cout("evaluare.out");
    cin>>s;
    cout<<eval();


    return 0;
}