Cod sursa(job #2788506)

Utilizator iraresmihaiiordache rares mihai iraresmihai Data 25 octombrie 2021 19:37:29
Problema Evaluarea unei expresii Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.44 kb
///rezolvare cu varianta 3

#include <stdio.h>
#include <string.h>
#define MAXCH 100000

char s[MAXCH];
int loc;

int multiplication();
int nrCalculator();

int factor() {
    int nr;

    nr = 0;
    while ( s[loc] >= '0' && s[loc] <= '9' ) {
        nr = nr * 10 + s[loc] - '0';
        loc++;
    }

    return nr;
}

int plus() {
    int result;

    result = multiplication();
    while ( s[loc] == '+' || s[loc] == '-' ) {
        if ( s[loc] == '+' ) {
            loc++;
            result += multiplication();
        }
        else{
            loc++;
            result -= multiplication();
        }
    }

    return result;
}

int multiplication() {
    int result;

    result = nrCalculator();
    while ( s[loc] == '*' || s[loc] == '/' ) {
        if ( s[loc] == '*' ) {
            loc++;
            result *= nrCalculator();
        }
        else{
            loc++;
            result /= nrCalculator();
        }
    }

    return result;
}

int nrCalculator() {
    int result;

    if ( s[loc] != '(' )
        result = factor();
    else {
        loc++;
        result = plus();
        loc++;
    }

    return result;
}

int main() {
    FILE *fin, *fout;

    fin = fopen("evaluare.in", "r");
    fgets(s, MAXCH, fin);
    fclose(fin);

    loc = 0;

    fout = fopen("evaluare.out", "w");
    fprintf(fout, "%d", plus());
    fclose(fout);

    return 0;
}