Cod sursa(job #3196017)

Utilizator divadddDavid Curca divaddd Data 22 ianuarie 2024 14:58:18
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <bits/stdc++.h>
using namespace std;
string str;
int pos;

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

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

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

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

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

int factor(){
    int ans = 0;
    if(str[pos] == '('){
        pos++;
        ans = eval();
        pos++;
    }else{
        while(isdigit(str[pos])){
            ans *= 10;
            ans += (str[pos]-'0');
            pos++;
        }
    }
    return ans;
}