Cod sursa(job #2136875)

Utilizator priboiraduPriboi Radu Bogdan priboiradu Data 20 februarie 2018 12:46:05
Problema Evaluarea unei expresii Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.3 kb
#include <stdio.h>
#include <stdlib.h>

char exp[100001];
int i = 0;
int expresie();
int termen();
int factor();

int expresie() {
    int s = termen();
    while ( exp[i] == '+' || exp[i] == '-' ) {
        if ( exp[i] == '+' ) {
            i++;
            s += termen();
        }
        if ( exp[i] == '-' ) {
            i++;
            s -= termen();
        }
    }
    return s;
}

int termen() {
    int p = factor();
    while ( exp[i] == '*' || exp[i] == '/' ) {
        if ( exp[i] == '*' ) {
            i++;
            p *= factor();
        }
        if ( exp[i] == '/' ) {
            i++;
            p /= factor();
        }
    }
    return p;
}

int factor() {
    int val = 0, semn = 1;
    if ( exp[i] == '-' ) {
        semn = -1;
        i++;
    }
    if ( exp[i] == '(' ) {
        i++;
        val = expresie();
        i++;
        return semn * val;
    }
    while ( exp[i] >= '0' && exp[i] <= '9' ) {
        val = val * 10 + ( exp[i++] - '0' );
    }
    return semn * val;
}

int main() {
    FILE *fin, *fout;
    int n = 0;
    fin = fopen( "evaluare.in", "r" );
    fout = fopen( "evaluare.out", "w" );
    exp[n] = fgetc( fin );
    while ( exp[n] != '\n' ) {
        exp[++n] = fgetc( fin );
    }
    fprintf( fout, "%d", expresie() );
    fclose( fin );
    fclose( fout );
    return 0;
}