Cod sursa(job #3292545)

Utilizator David_Popa123Popa David Matei David_Popa123 Data 8 aprilie 2025 14:51:20
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <bits/stdc++.h>

using namespace std;

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

int expr();
int ter();
int fact();
int ct();

int i;
string s;

int ct() {
    int ans = 0;
    while( isdigit( s[i] ) )
        ans = ans * 10 + s[i++] - '0';
    return ans;
}

int expr() {
    int ans = ter();
    while( s[i] == '+' || s[i] == '-' ) {
        if( s[i] == '+' ) {
            i++;
            ans += ter();
        } else {
            i++;
            ans -= ter();
        }
    }
    return ans;
}

int ter() {
    int ans = fact();
    while( s[i] == '*' || s[i] == '/' ) {
        if( s[i] == '*' ) {
            i++;
            ans *= fact();
        } else {
            i++;
            ans /= fact();
        }
    }
    return ans;
}

int fact() {
    int ans;
    if( s[i] == '(' ) { //avem expresie
        i++;
        ans = expr();
        i++;
    } else
        ans = ct();
    return ans;
}
int main() {
    getline( fin, s );
    fin >> s;
    fout << expr();
    return 0;
}