Cod sursa(job #2136868)

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

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

int expresie() {
    int s = termen();
    printf( "%d ", s);
    if ( exp[i] == '+' ) {
        i++;
        s += termen();
    }
    if ( exp[i] == '-' ) {
        i++;
        s -= termen();
    }
    return s;
}

int termen() {
    int p = factor();
    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;
}