Cod sursa(job #2775053)

Utilizator Victor2006Nicola Victor-Teodor Victor2006 Data 14 septembrie 2021 09:27:29
Problema Evaluarea unei expresii Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <stdio.h>
#include <ctype.h>

using namespace std;

int ch;

long long eval_term();
long long eval_fact();

long long eval_exp() {
    long long sum = eval_term();
    while ( ch == '+' || ch == '-' ) {
        if ( ch == '+' ) {
            ch = fgetc( stdin );
            sum += eval_term();
        }
        else {
            ch = fgetc( stdin );
            sum -= eval_term();
        }
    }
    return sum;
}

long long eval_term() {
    long long prod = eval_fact();
    while ( ch == '*' || ch == '/' ) {
        if ( ch == '*' ) {
            ch = fgetc( stdin );
            prod *= eval_fact();
        }
        else {
            ch = fgetc( stdin );
            prod /= eval_fact();
        }
    }
    return prod;
}

long long eval_fact() {
    long long ans = 0;
    if ( ch == '(' ) {
        ch = fgetc( stdin );
        ans = eval_exp();
        ch = fgetc( stdin );
    }
    else {
        while ( isdigit( ch ) ) {
            ans = ans * 10 + ch - '0';
            ch = fgetc( stdin );
        }
    }
    return ans;
}

int main() {
    ch = fgetc( stdin );
    printf( "%lld\n", eval_exp() );
    return 0;
}