Cod sursa(job #2775056)

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

using namespace std;

FILE *fin, *fout;
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( fin );
            sum += eval_term();
        }
        else {
            ch = fgetc( fin );
            sum -= eval_term();
        }
    }
    return sum;
}

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

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

int main() {
    fin = fopen( "evaluare.in", "r" );
    ch = fgetc( fin );
    fout = fopen( "evaluare.out", "w" );
    fprintf( fout, "%lld\n", eval_exp() );
    fclose( fin );
    fclose( fout );
    return 0;
}