Cod sursa(job #2727764)

Utilizator florinrafiliuRafiliu Florin florinrafiliu Data 22 martie 2021 14:31:49
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream fin ("evaluare.in");
ofstream fout ("evaluare.out");

char sir[100005];

int i;

int eval ();
int termen ();
int factor ();

int eval () {
    int ans = termen();
    while(sir[i] == '+' || sir[i] == '-') {
        if(sir[i] == '+') {
            i += 1;
            ans += termen();
        } else if(sir[i] == '-') {
            i += 1;
            ans -= termen();
        }
    }
    return ans;
}

int termen() {
    int ans = factor();
    while(sir[i] == '*' || sir[i] == '/') {
        if(sir[i] == '*') {
            i += 1;
            ans *= factor();
        } else if(sir[i] == '/') {
            i += 1;
            ans /= factor();
        }
    }
    return ans;
}

int factor() {
    int ans = 0;
    if(sir[i] == '(') {
        i += 1;
        ans = eval();
        i += 1;
    } else {
        while(sir[i] >= '0' && sir[i] <= '9') {
            ans = ans * 10 + (int)sir[i] - '0';
            i += 1;
        }
    }
    return ans;
}

int main()
{
    fin >> sir;
    fout << eval();
    return 0;
}